Hogyan adhatunk meg érveket a bashszkripthez?

Parancsok, szintaxisok és példák

Egy bash parancsfájlt írhat úgy, hogy olyan parancsokat kap, amelyeket a parancssorból a parancsfájl meghív. Ezt a módszert akkor használjuk, ha a szkriptnek kicsit eltérő függvényt kell végrehajtania a bemeneti paraméterek (az érvek) értékétől függően.

Például, lehet, hogy van egy "stats.sh" nevű parancsfájl, amely végrehajt egy adott műveletet egy fájlban, például beszámolva a szavakat. Ha több szálon szeretné használni ezt a szkriptet, akkor a legjobb, ha argumentumként adja át a fájlnevet, hogy ugyanazt a szkriptet használhassa a feldolgozni kívánt fájlokra. Például, ha a feldolgozni kívánt fájl neve "dalszöveg", a következő parancssorba írja be:

sh stats.sh dalszöveg

Az argumentumokat a $ 1, $ 2, $ 3 stb. Változók segítségével érjük el, ahol $ 1 az első argumentumra, a második argumentumra pedig $ 2, stb. Ezt a következő példában mutatjuk be:

FILE1 = $ 1 wc $ FILE1

Az olvashatóság érdekében adj hozzá egy leíró nevû változót az elsõ argumentum értékéhez ($ 1), majd hívd le a szóösszesítõ segédprogramot ( wc ) erre a változóra ($ FILE1).

Ha változó számú argumentummal rendelkezik, használhatja a "$ @" változót, amely az összes bemeneti paraméter tömbje. Ez azt jelenti, hogy egy for-loop-ot is használhat az iteratív feldolgozáshoz, amint az a következő példában látható:

a "$ @" FILE1 esetében a wc $ FILE1 elvégezve

Íme egy példa arra, hogyan kell ezt a parancsfájlt argumentumokkal hívni a parancssorból:

sh stats.sh songlist1 songlist2 songlist3

Ha egy argumentum szóközzel rendelkezik, akkor egy idézettel kell rendelkeznie. Például:

sh stats.sh 'songlist 1' 'songlist 2' 'songlist 3'

Gyakran egy szkriptet írnak, hogy a felhasználó bármely sorrendben átadhassa az argumentumokat zászlók segítségével. A zászlók módszerrel az argumentumok közül néhány is opcionális.

Tegyük fel, hogy van olyan szkript, amely bizonyos paraméterek alapján, például "felhasználónév", "dátum" és "termék" alapján lekéri az adatokat egy adatbázisból, és egy meghatározott "formátumban" jelentést készít. Most írja a szkriptet, hogy átadja ezeket a paramétereket, amikor a szkriptet hívják. Lehet, hogy így néz ki:

makereport -u jsmith -p noteszgépek -d 10-20-2011 -f pdf

A Bash ezt a funkciót a "getopts" funkcióval teszi lehetővé. A fenti példában a getopts-ot a következőképpen használhatod:

Ez egy olyan hurok , amely a "getopts" függvényt és az úgynevezett "optstring" -et, ebben az esetben "u: d: p: f:" -et használja az iterációhoz az argumentumokon keresztül. Az "hurok" az optstringen halad, amely tartalmazza az argumentumok átadására használható zászlókat, és hozzárendeli az adott zászlóhoz tartozó argumentum értéket az "opció" változóhoz. Az esettanulmány ezt követően az "opció" változó értékét egy globális változóhoz rendeli, amely az összes argumentum olvasása után használható.

Az optsztringben lévő kettőspontok azt jelentik, hogy a megfelelő zászlókra az értékek szükségesek. A fenti példában minden zászlót egy kettőspont követ: "u: d: p: f:". Ez azt jelenti, hogy minden zászlónak értékre van szüksége. Ha például a "d" és az "f" zászlók nem voltak várhatóak, az optstring "u: dp: f" lenne.

Az optsztring kezdetén egy kettőspont, például ": u: d: p: f:", teljesen más jelentéssel bír. Lehetővé teszi olyan zászlók kezelését, amelyek nem szerepelnek az optsztringben. Ebben az esetben az "opció" változó értéke "?" és az "OPTARG" értéke a váratlan zászlóra van állítva. Ez lehetővé teszi, hogy megjelenjen egy megfelelő hibaüzenet, amely tájékoztatja a felhasználót a hibáról.

Azok a érvek, amelyeket nem jelölt meg a zászló, a getopts figyelmen kívül hagyja. Ha az optstringben megadott zászlók nincsenek megadva a szkript meghívásakor, semmi sem történik, hacsak nem kezeled ezt az esetet kifejezetten a kódjába. A getopok által nem kezelt minden érvet még mindig a szokásos $ 1, $ 2, stb. Változókkal rögzíthetjük.