Kuidas teisendada argumente bash-skripti

Käsud, süntaks ja näited

Võite kirjutada bash-skripti selliselt, et ta saab käsurealt skripti kutsumiseks määratud argumente. Seda meetodit kasutatakse juhul, kui skript peab sisestatavate parameetrite (argumendid) väärtuste alusel pisut erineva funktsiooni täitma.

Näiteks võib teil olla skript nimega "stats.sh", mis täidab failis teatud toiminguid, näiteks loendades selle sõnad. Kui soovite kasutada seda skripti paljudel failidel, on parimal juhul edastada faili nimi argumendina, nii et saate kasutada sama skripti kõikidele töödeldavatele failidele. Näiteks, kui töödeldava faili nimi on "song list", sisestage järgmine käsurida:

sh stats.sh laulude nimekiri

Argumente saab kasutada skripti sees, kasutades muutujaid $ 1, $ 2, $ 3 jne, kus $ 1 viitab esimesele argumendile, $ 2 teisele argumendile ja nii edasi. Seda illustreerib järgmine näide:

FILE1 = $ 1 wc $ FILE1

Et loetavust, määrake muutuja koos kirjeldava nimetusega esimese argumendi väärtuseks ($ 1) ja seejärel helistage selle muutuja ($ FILE1) sõnaarvu utiliiti ( wc ).

Kui teil on muutuv arv argumente, võite kasutada muutuja "$ @", mis on kõigi sisendparameetrite massiiv. See tähendab, et võite kasutada for-loopi, et järjest korrata igaüks, nagu on näidatud järgmises näites:

FILE1 puhul "$ @" ei ole wc $ FILE1 tehtud

Siin on näide, kuidas seda skripti kutsuda käsurea argumentidega:

sh stats.sh songlist1 songlist2 songlist3

Kui argumendil on tühikud, peate selle lisama üksikute jutumärkidega. Näiteks:

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

Sagedasti on skript kirjutatud selliselt, et kasutaja saab lipudest ükskõik millises järjekorras argumente edasi anda. Lippude meetodiga saate mõne argumendi muuta ka valikuliseks.

Öelge, et teil on skript, mis otsib kindlaksmääratud parameetrite põhjal andmebaasi teavet, näiteks "kasutajanimi", "kuupäev" ja "toode" ning genereerib aruande määratud vormingus. Nüüd soovite kirjutada oma skripti nii, et võite neid parameetreid edastada, kui skript on kutsutud. See võib tunduda nii:

makereport -u jsmith -p märkmikud -d 10-20-2011 -f pdf

Bash võimaldab seda funktsiooni funktsiooni "getopts" abil. Eespool toodud näites võite kasutada getoptsi järgmiselt:

See on aeg-loop, mis kasutab "getoptsi" funktsiooni ja nn optstringi, sel juhul "u: d: p: f:", et argumente läbi joosta. Ajaline silm läheb läbi optstringi, mis sisaldab lippe, mida saab argumentide edastamiseks kasutada, ning määrab selle lipu jaoks antud argumendi väärtuse muutujale "variant". Seejärel määrab juhtumianalüüs muutuja "option" väärtuseks globaalse muutuja, mida saab kasutada pärast kõigi argumentide lugemist.

Optstringi käärid tähendavad, et väärtused on vajalikud vastavate lipude jaoks. Eespool toodud näites järgivad kõik lipud käärsoole: "u: d: p: f:". See tähendab, et kõik lipud vajavad väärtust. Kui näiteks "d" ja "f" lipud ei ole oodata väärtust, oleks optstring "u: dp: f".

Optstringi alguses on koolon, näiteks ": u: d: p: f:", millel on täiesti erinev tähendus. See võimaldab teil käsitleda lippe, mis pole optstringis esindatud. Sellisel juhul on "võimaluse" muutuja väärtuseks seatud "?" ja OPTARG väärtuseks on määratud ootamatu lipu. Võimaldab kuvada sobiva veateate, mis teavitab kasutajat veast.

Argumente, millele pole eelnenud lipu, ignoreerivad getoptsid. Kui optstringis märgitud lippe pole skripti kutsumises ette nähtud, ei juhtu midagi, kui te ei tegele selle juhtumiga oma koodis eraldi. Kõik argumendid, mida käsiraamatuid ei käidelda, võib ikkagi salvestada tavaliste $ 1, $ 2 jne muutujatega.