Ako preniesť argumenty na Bash-Script

Príkazy, syntax a príklady

Môžete napísať bash skript tak, že dostane argumenty zadané pri volaní skriptu z príkazového riadku. Táto metóda sa používa, keď má skript vykonať trochu inú funkciu v závislosti od hodnôt vstupných parametrov (argumenty).

Môžete napríklad mať skript nazvaný "stats.sh", ktorý vykonáva konkrétnu operáciu v súbore, napríklad počítanie jeho slov. Ak chcete tento skript použiť v mnohých súboroch, najlepšie je, aby ste preniesli názov súboru ako argument, aby ste mohli použiť rovnaký skript pre všetky súbory, ktoré majú byť spracované. Ak je napríklad názov súboru, ktorý sa má spracovať, "zoznam skladieb", zadajte nasledujúci príkazový riadok:

sh stats.sh zoznam skladieb

Argumenty sa pristupujú vo vnútri skriptu pomocou premenných $ 1, $ 2, $ 3, atď., Kde $ 1 odkazuje na prvý argument, $ 2 na druhý argument a tak ďalej. Toto je ilustrované v nasledujúcom príklade:

FILE1 = $ 1 wc $ FILE1

Pre čitateľnosť priraďte k premennej ($ FILE1) premennú s popisným názvom na hodnotu prvého argumentu ($ 1) a potom vyvolajte pomôcku na čítanie slov ( wc ).

Ak máte premenlivý počet argumentov, môžete použiť premennú "$ @", ktorá predstavuje pole všetkých vstupných parametrov. To znamená, že môžete použiť opakovanú cyklicu na iteračné spracovanie každej z nich, ako je znázornené v nasledujúcom príklade:

pre súbor FILE1 v "$ @" urobte wc $ FILE1 hotovo

Tu je príklad toho, ako zavolať tento skript s argumentmi z príkazového riadku:

sh stats.sh songlist1 songlist2 songlist3

Ak má argument medzery, musíte ho priložiť k jednotlivým úvodzovkám. Napríklad:

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

Často sa skript píše tak, že používateľ môže používať príznaky v ľubovoľnom poradí. Vďaka metóde vlajok môžete niektoré argumenty urobiť aj voliteľnými.

Povedzme, že máte skript, ktorý načíta informácie z databázy na základe zadaných parametrov, ako napríklad "používateľské meno", "dátum" a "produkt" a generuje prehľad v určenom "formáte". Teraz chcete skript napísať tak, aby ste mohli tieto parametre odovzdať pri volaní skriptu. Môže to vyzerať takto:

makereport -u jsmith -p notebooky -d 10-20-2011 -f pdf

Bash umožňuje túto funkciu pomocou funkcie "getopts". Pre vyššie uvedený príklad by ste mohli použiť getopty takto:

Toto je momentová slučka, ktorá využíva funkciu "getopts" a tzv. Optstring, v tomto prípade "u: d: p: f:". Momentová slučka prechádza cez optstring, ktorý obsahuje príznaky, ktoré sa dajú použiť na zadávanie argumentov a priradí hodnotu parametra poskytnutú pre danú príznak premennej "možnosť". Prípadové vyhlásenie potom priradí hodnotu premennej "možnosť" globálnej premennej, ktorá sa môže použiť po prečítaní všetkých argumentov.

Čiarky v optstring znamenajú, že hodnoty sú potrebné pre zodpovedajúce príznaky. Vo vyššie uvedenom príklade sú všetky vlajky nasledované dvojbodkou: "u: d: p: f:". To znamená, že všetky vlajky potrebujú hodnotu. Ak by sa napríklad neočakávali, že by znamienka "d" a "f" mala hodnotu, optstring by bol "u: dp: f".

Hrubé čiarky na začiatku optstringu, napríklad ": u: d: p: f:", má úplne iný význam. Umožňuje vám manipulovať s vlajkami, ktoré nie sú zobrazené v optstring. V takomto prípade je hodnota premennej "opcia" nastavená na "?" a hodnota "OPTARG" je nastavená na neočakávaný príznak. Umožňuje zobraziť vhodnú chybovú správu informujúcu používateľa o chybe.

Argumenty, ktoré nepredchádza príznak, ignorujú getopts. Ak sa pri zadávaní skriptu neposkytnú príznaky špecifikované v optstring, nedôjde k ničomu, pokiaľ sa s týmto prípadom zvlášť nezabezpečíte v kóde. Akékoľvek argumenty, ktoré nie sú spracované pomocou getov, sa môžu stále zachytiť pomocou bežných premenných $ 1, $ 2, atď.