Hogyan adjunk át érveket egy Bash-szkriptnek
Írjon egy Bash-szkriptet, hogy az olyan argumentumokat kapjon, amelyeket a parancssorból történő meghívásakor ad meg. Használja ezt a módszert, ha egy szkriptnek kissé eltérő funkciót kell végrehajtania a bemeneti paraméterek értékétől függően, más néven érvek.

Lifewire / Ran Zheng
Példa argumentumok átadására Bash-szkriptben
Ha kifejlesztett egy szkriptet a stats.sh amely számolja a szavakat egy fájlban, akkor a legjobb, ha a fájlnevet argumentumként adja át, hogy ugyanazt a szkriptet lehessen használni az összes feldolgozandó fájlhoz. Például, ha a feldolgozandó fájl neve dallista, írja be a következőt a parancssorba:
sh stats.sh dallista
Az argumentumok a szkripten belül érhetők el a változók segítségével $1, $2, $3, stb. A változó $1 az első érvre utal, $2 a második érvhez, és $3 a harmadik érvre. Például a szkriptben:
FILE1=$1
wc $FILE1
Rendeljen leíró nevű változót az első argumentum értékéhez ($1), majd hívja meg a szószámláló segédprogramot (WC) a változón $FILE1 vagy bármi mást, amit esetleg szeretnél.
Ha változó számú argumentumra van szüksége, használja a $@ változó, amely az összes bemeneti paraméter tömbje. Ez az eljárás a hurokhoz mindegyik iteratív feldolgozásához a következő példa szerint:
FILE1 fájlhoz "$@"
csináld
wc $FILE1
Kész
Íme egy példa arra, hogyan hívhatja meg ezt a szkriptet argumentumokkal a parancssorból:
sh stats.sh dallista1 dallista2 dallista3
Ha egy argumentum szóközt tartalmaz, tegye idézőjelek közé. Például:
sh stats.sh "1. dallista" "2. dallista" "3. dallista"
Flags módszer
Gyakran egy szkriptet úgy írnak, hogy az argumentumok tetszőleges sorrendben adhatók át zászlókkal. A flags metódussal néhány argumentum opcionálissá tehető.
Például írjon egy szkriptet, amely meghatározott paraméterek alapján információkat kér le egy adatbázisból, mint pl felhasználónév, dátum, és termék, és jelentést készít egy meghatározott formátumban. A szkriptet úgy kell megírni, hogy a parancsfájl meghívásakor ezek a paraméterek átadásra kerüljenek. Így nézhet ki:
makereport -u jsmith -p notebookok -d 2011-10-20 -f pdf
A Bash ezt a funkciót a getopts funkció. A fenti példához használja getopts alábbiak szerint:
miközben getopts u: d: p: f: opció
csináld
eset "${option}"
ban ben
u) FELHASZNÁLÓ=${OPTARG};;
d) DÁTUM=${OPTARG};;
p) TERMÉK=${OPTARG};;
f) FORMAT=${OPTARG};;
esac
Kész
Ez egy while ciklus, amely a getopts funkció és egy ún optstring-ebben az esetben u: d: p: f:- ismételni az érveket. Az míg ciklus végigmegy az optstringen, amely tartalmazza az argumentumok átadására használt jelzőket, és hozzárendeli a jelzőhöz megadott argumentumértéket a változóhoz választási lehetőség. Az ügy utasítás ezután hozzárendeli a változó értékét választási lehetőség egy globális változóhoz, amely az összes argumentum beolvasása után kerül felhasználásra.
A kettőspont jelentése
Az optstringben lévő kettőspontok azt jelentik, hogy értékek szükségesek a megfelelő jelzőkhöz. A fenti példában a u: d: p: f:, minden zászlót kettőspont követ. Ez azt jelenti, hogy minden zászlónak értékre van szüksége. Ha például a d és f a zászlóknak nem volt értéke, u: dp: f lenne az optstring.
A kezdő kettőspont a getoptokat "csendes jelentési módba" helyezi. A szkript teljes hibája helyett bármilyen váratlan argumentum kitölti a? opciót, és szükség szerint megkeresheti vagy kezelheti. Ha nincs kezdő kettőspont az optstringben, a terminál hibát jelez. Például van egy felülről származó szkriptem, amely számolja a szavakat. Olyan szintaxist vár, mint a "stats.sh -f fájlnév". A kettőspont nélkül, ha megpróbálom a "stats.sh -h"-t, a következőt kapom:
stats.sh -h
stats.sh: illegális opció -- h
Míg a kettősponttal berakhatok egy sort a szkriptembe, ami ilyesmit vár, például - ?) echo "Nem található -${OPTARG} argumentum.";;. Ez lehetővé teszi a váratlan bejegyzés rögzítését és kezelését (jelen esetben a saját hibaüzenetem kiadásával).
stats.sh -h
Nem található -h argumentum.
Azokat az argumentumokat, amelyeket nem előz meg zászló, figyelmen kívül hagyja a getopts. Ha az optstringben megadott jelzők nincsenek megadva a szkript meghívásakor, akkor semmi sem történik, hacsak nem kezeli ezt az esetet a kódjában. Minden olyan érv, amelyet nem kezel getops továbbra is megfogható a regulárissal $1, $2, és $3 változók.