Kuidas Bash-skriptile argumente edastada

Kirjutage Bashi skript, et see saaks argumendid, mis määratakse skripti käsurealt kutsumisel. Kasutage seda meetodit, kui skript peab täitma pisut erinevat funktsiooni, sõltuvalt sisendparameetrite väärtustest, mida nimetatakse ka argumendid.

Illustreeritud bash-skriptidega arvutimonitor

Lifewire / Ran Zheng

Näide argumentide edastamisest Bash-skriptis

Kui töötasite välja skripti nimega stats.sh mis loeb failis olevaid sõnu, on kõige parem edastada failinimi argumendina, et kõigi töödeldavate failide jaoks saaks kasutada sama skripti. Näiteks kui töödeldava faili nimi on laululoend, sisestage käsureale järgmine tekst:

sh stats.sh laululoend

Argumentidele pääseb juurde skriptis muutujate abil $1, $2, $3, ja nii edasi. Muutuja $1 viitab esimesele argumendile, $2 teisele argumendile ja $3 kolmanda argumendi juurde. Näiteks skriptis:

FILE1 = $1
wc $FILE1

Määrake esimese argumendi väärtusele kirjeldava nimega muutuja ($1) ja seejärel kutsuge sõna loendusutiliit (tualett) muutujal $FILE1 või mida iganes muud teha tahad.

Kui vajate muutuvat arvu argumente, kasutage

$@ muutuja, mis on kõigi sisendparameetrite massiiv. See protseduur kasutab a silmuse jaoks iga kord iteratiivselt töödelda, nagu on illustreeritud järgmises näites:

FILE1 jaoks asukohas "$@"
teha
wc $FILE1
tehtud

Siin on näide selle skripti kutsumiseks käsurealt argumentidega:

sh stats.sh laululoend1 laululoend2 laululoend3

Kui argument sisaldab tühikuid, lisage see üksikute jutumärkidega. Näiteks:

sh stats.sh 'laululoend 1' 'laululoend 2' 'laululoend 3'

Lippude meetod

Sageli kirjutatakse skript nii, et argumendid saab lippude abil edastada suvalises järjekorras. Lipumeetodi abil saab mõned argumendid teha valikuliseks.

Näiteks kirjutage skript, mis otsib andmebaasist teavet kindlaksmääratud parameetrite alusel, nt kasutajanimi, kuupäev, ja toodeja genereerib määratud vormingus aruande. Skript tuleb kirjutada nii, et skripti kutsumisel edastataks need parameetrid. See võib välja näha selline:

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

Bash võimaldab seda funktsiooni koos getopts funktsiooni. Ülaltoodud näite puhul kasutage getopts järgnevalt:

samas kui getopts u: d: p: f: valik
teha
juhtum "${option}"
sisse
u) KASUTAJA=${OPTARG};;
d) KUUPÄEV=${OPTARG};;
p) TOODE=${OPTARG};;
f) FORMAT=${OPTARG};;
esac
tehtud

See on ajatsükkel, mis kasutab getopts funktsioon ja nn optstring-sel juhul u: d: p: f:— argumentide kordamine. The samas tsükkel läbib optstringi, mis sisaldab argumentide edastamiseks kasutatavaid lippe ja määrab muutujale selle lipu jaoks ette nähtud argumendi väärtuse valik. The juhtum lause määrab seejärel muutuja väärtuse valik globaalsele muutujale, mida kasutatakse pärast kõigi argumentide lugemist.

Käärsoole tähendused

Koolonid optstringis tähendavad, et vastavate lippude jaoks on vaja väärtusi. Ülaltoodud näites u: d: p: f:, kõikidele lippudele järgneb koolon. See tähendab, et kõik lipud vajavad väärtust. Kui näiteks d ja f lippudel ei eeldatud väärtust, u: dp: f oleks optstring.

Algkoolon lülitab getopts 'vaikse aruandluse režiimi'. Selle asemel, et skripti täielikult eksida, täidab mõni ootamatu argument? ja saate seda vajadusel otsida või käsitseda. Ilma algse koolonita optstringis kuvab terminal veateate. Näiteks on mul ülaltoodud skript, mis loeb sõnu. See ootab süntaksit nagu "stats.sh -f failinimi". Ilma koolonita, kui proovin "stats.sh -h", saan:

stats.sh -h
stats.sh: ebaseaduslik valik -- h

Kusjuures kooloniga saan ma oma skripti lisada rea, mis eeldab midagi sellist, näiteks - ?) echo "Argumenti -${OPTARG} ei leitud.";;. See võimaldab mul ootamatut kirjet tabada ja käsitleda (antud juhul väljastades oma veateate).

stats.sh -h
-h argumenti ei leitud.

Argumente, millele ei eelne lippu, ignoreeritakse getopts. Kui optstringis määratud lippe skripti kutsumisel ei pakuta, ei juhtu midagi, välja arvatud juhul, kui te seda juhtumit oma koodis spetsiaalselt käsitlete. Kõik argumendid, mida ei käsitlenud getops saab ikka tavalisega jäädvustada $1, $2, ja $3 muutujad.