బాష్ స్క్రిప్ట్కు ఆర్గ్యుమెంట్లను ఎలా పాస్ చేయాలి?

ఆదేశాలు, సింటాక్స్ మరియు ఉదాహరణలు

స్క్రిప్ట్ను కమాండ్ లైన్ నుండి పిలుస్తున్నప్పుడు పేర్కొన్న వాదనలు అందుకుంటూ మీరు ఒక బాష్ లిపిని వ్రాయవచ్చు. ఇన్పుట్ పారామితులు (వాదనలు) విలువలను బట్టి కొంచెం భిన్నమైన పనితీరును స్క్రిప్ట్ కలిగి ఉన్నప్పుడు ఈ పద్ధతి ఉపయోగించబడుతుంది.

ఉదాహరణకు, మీరు "stats.sh" అని పిలవబడే లిపిని కలిగి ఉండవచ్చు, అది దానిలోని పదాలను గణించే విధంగా ఒక ప్రత్యేకమైన ఆపరేషన్ను నిర్వహిస్తుంది. మీరు అనేక ఫైళ్లలో ఆ స్క్రిప్ట్ ను ఉపయోగించాలనుకుంటే, ఫైల్ పేరును ఒక వాదనగా ఉత్తీర్ణపరచడం ఉత్తమం, అందువల్ల మీరు అన్ని ఫైళ్ళు ప్రాసెస్ చేయటానికి అదే స్క్రిప్ట్ ను ఉపయోగించవచ్చు. ఉదాహరణకు, ప్రాసెస్ చేయవలసిన ఫైల్ పేరు "పాటల జాబితా" అయితే, మీరు కింది ఆదేశ పంక్తిని నమోదు చేస్తారు:

sh stats.sh పాటల జాబితా

$ 1, $ 2, $ 3 మొదలగునవి వేరియబుల్స్ ఉపయోగించి వాదనలు స్క్రిప్టులో ప్రాప్తి చేయబడతాయి, అక్కడ మొదటి వాదనను $ 1 సూచిస్తుంది, రెండవ వాదనకు $ 2 మరియు అందువలన న. ఇది క్రింది ఉదాహరణలో వివరించబడింది:

FILE1 = $ wc $ FILE1

చదవటానికి, మొదటి వాదన ($ 1) యొక్క విలువకు ఒక వివరణాత్మక పేరుతో ఒక వేరియబుల్ను కేటాయించండి, ఆపై ఈ వేరియబుల్ ($ FILE1) లో పదం కౌంట్ యుటిలిటీ ( wc ) ను కాల్ చేయండి.

మీకు వేరియబుల్ సంఖ్య వాదనలు ఉంటే, మీరు "$ @" వేరియబుల్ని ఉపయోగించవచ్చు, ఇది అన్ని ఇన్పుట్ పారామితుల యొక్క వ్యూహం. దీనర్థం మీరు ఈ క్రింది ఉదాహరణలో వివరించినట్లు ప్రతి ఒక్కరికి ప్రాసెస్ చేయడానికి లూప్ను ఉపయోగించవచ్చు.

"$ @" లో FILE1 కోసం wc $ FILE1 చేయండి

కమాండ్ లైన్ నుండి వాదాలతో ఈ లిపిని ఎలా పిలుద్దామనే దాని ఉదాహరణ:

sh stats.sh పాటల జాబితా 1 songlist2 songlist3

ఒక వాదన ఖాళీలు ఉంటే, మీరు దానిని ఒకే కోట్లతో జతచేయాలి. ఉదాహరణకి:

sh stats.sh 'పాటల జాబితా 1' 'పాటల జాబితా 2' 'పాటల జాబితా 3'

తరచూ ఒక స్క్రిప్ట్ జెండాలను ఉపయోగించి ఏ క్రమంలోనైనా వినియోగదారు వాదనలు పంపవచ్చు. జెండాలు పద్ధతితో, మీరు కొన్ని వాదనలు ఐచ్ఛికంగా చేయవచ్చు.

పేర్కొనబడిన పారామితుల ఆధారంగా "యూజర్పేరు", "డేట్" మరియు "ఉత్పత్తి" వంటి సమాచారమును తిరిగి పొందగల లిపిని కలిగి ఉన్న లిపిని చెపుతాను మరియు పేర్కొన్న "ఫార్మాట్" లో రిపోర్టుని ఉత్పత్తి చేస్తుంది. ఇప్పుడు మీరు మీ లిపిని రాయాలనుకుంటున్నారా, అందువల్ల ఈ పారామితులలో స్క్రిప్ట్ పిలువబడుతున్నప్పుడు మీరు పాస్ చెయ్యవచ్చు. ఇది ఇలా ఉండవచ్చు:

makereport -u jsmith -p నోట్బుక్లు -d 10-20-2011 -f pdf

ఈ కార్యాచరణను "getopts" ఫంక్షన్తో బాష్ అనుమతిస్తుంది. పైన ఉదాహరణ కోసం, మీరు క్రింది getopts ఉపయోగించవచ్చు:

ఇది "getopts" ఫంక్షన్ మరియు "optstring" అని పిలువబడే ఈ సందర్భంలో "u: d: p: f:" వాదనలు ద్వారా మళ్ళిస్తుంది. ఆ-లూప్ ఆప్స్ట్రింగ్ ద్వారా నడుస్తుంది, ఇది వాదనలు పాస్ చేయడానికి ఉపయోగించే జెండాలను కలిగి ఉంటుంది మరియు వేరియబుల్ "ఆప్షన్" కు ఆ ఫ్లాగ్కు అందించిన వాదన విలువను కేటాయించవచ్చు. కేస్-స్టేట్మెంట్ తరువాత వేరియబుల్ "ఐచ్చికం" యొక్క విలువను ప్రపంచ వాల్యూమ్కు కేటాయించి అన్ని వాదనలు చదివిన తరువాత ఉపయోగించబడతాయి.

ఆప్ట్ స్ట్రింగ్ లోని కోలన్లు సంబంధిత జెండాలకు విలువలు అవసరమవతాయి. పై ఉదాహరణలో అన్ని జెండాలు ఒక కోలన్ తరువాత ఉంటాయి: "u: d: p: f:". దీని అర్థం, అన్ని ఫ్లాగ్లకు విలువ అవసరం. ఉదాహరణకు, "d" మరియు "f" జెండాలు విలువను కలిగి ఉండకపోయినా, ఆప్స్ట్రింగ్ "u: dp: f" అవుతుంది.

ఆప్ స్ట్రింగ్ ప్రారంభంలో ఒక కోలన్, ఉదాహరణకు: "u: d: p: f:", పూర్తిగా భిన్నమైన అర్ధాన్ని కలిగి ఉంటుంది. మీరు ఆప్స్ట్రింగ్లో ప్రాతినిధ్యం లేని జెండాలను నిర్వహించడానికి అనుమతిస్తుంది. ఆ సందర్భంలో "ఎంపిక" వేరియబుల్ యొక్క విలువ "?" మరియు "OPTARG" విలువ ఊహించని జెండాకు సెట్ చేయబడింది. మీరు పొరపాటున యూజర్ యొక్క సరైన సమాచార సందేశాన్ని ప్రదర్శించటానికి అనుమతిస్తుంది.

జెండా ద్వారా ముందుగా లేని వాదనలు getopts ద్వారా విస్మరించబడతాయి. స్క్రిప్ట్ను పిలిచినప్పుడు ఆప్ట్ స్ట్రింగ్ లో పేర్కొన్న జెండాలు ఇవ్వబడకపోతే, మీ కోడ్లో ప్రత్యేకంగా ఈ కేసుని ప్రత్యేకంగా నిర్వహించకపోతే ఏమీ జరగదు. గెట్స్ చేత నిర్వహించబడని ఏదైనా వాదనలు ఇప్పటికీ సాధారణ $ 1, $ 2, మొదలైన వేరియబుల్స్తో సంగ్రహించబడతాయి.