Kā nodot argumentus Bash skriptam

Uzrakstiet Bash skriptu, lai tas saņemtu argumentus, kas tiek norādīti, kad skripts tiek izsaukts no komandrindas. Izmantojiet šo metodi, ja skriptam ir jāveic nedaudz atšķirīga funkcija atkarībā no ievades parametru vērtībām, ko sauc arī par to argumenti.

Datora monitors ar ilustrētu bash skriptu

Lifewire / Ran Zheng

Argumentu nodošanas piemērs Bash skriptā

Ja esat izstrādājis skriptu ar nosaukumu stats.sh kas skaita vārdus failā, vislabāk ir nodot faila nosaukumu kā argumentu, lai vienu un to pašu skriptu varētu izmantot visiem failiem, kas tiks apstrādāti. Piemēram, ja apstrādājamā faila nosaukums ir dziesmu saraksts, komandrindā ievadiet šo:

sh stats.sh dziesmu saraksts

Argumentiem var piekļūt skriptā, izmantojot mainīgos $1, $2, $3, un tā tālāk. Mainīgais $1 atsaucas uz pirmo argumentu, $2 uz otro argumentu un $3 uz trešo argumentu. Piemēram, skriptā:

FILE1=$1
wc $FILE1

Piešķiriet mainīgo ar aprakstošu nosaukumu pirmā argumenta vērtībai ($1), un pēc tam izsauciet vārdu skaita utilītu (tualete) uz mainīgo $FILE1 vai ko citu, ko vēlaties darīt.

Ja nepieciešams mainīgs argumentu skaits, izmantojiet $@ mainīgais, kas ir visu ievades parametru masīvs. Šī procedūra izmanto a cilpai iteratīvi apstrādāt katru, kā parādīts šajā piemērā:

failam FILE1 mapē "$@"
darīt
wc $FILE1
darīts

Šeit ir piemērs, kā izsaukt šo skriptu ar argumentiem no komandrindas:

sh stats.sh dziesmu saraksts1 dziesmu saraksts2 dziesmu saraksts3

Ja argumentā ir iekļautas atstarpes, iekļaujiet to ar atsevišķām pēdiņām. Piemēram:

sh stats.sh 'dziesmu saraksts 1' 'dziesmu saraksts 2' 'dziesmu saraksts 3'

Karogu metode

Bieži tiek rakstīts skripts, lai argumentus varētu nodot jebkurā secībā, izmantojot karogus. Izmantojot karogu metodi, dažus argumentus var padarīt neobligātus.

Piemēram, uzrakstiet skriptu, kas izgūst informāciju no datu bāzes, pamatojoties uz noteiktiem parametriem, piemēram, lietotājvārds, datums, un produktsun ģenerē atskaiti noteiktā formātā. Skripts ir jāraksta tā, lai šie parametri tiktu nodoti, kad tiek izsaukts skripts. Tas varētu izskatīties šādi:

makereport -u jsmith -p piezīmju grāmatiņas -d 20-10-2011 -f pdf

Bash nodrošina šo funkcionalitāti ar getopts funkcija. Iepriekš minētajā piemērā izmantojiet getopts sekojoši:

kamēr getopts u: d: p: f: iespēja
darīt
lieta "${option}"
iekšā
u) LIETOTĀJS=${OPTARG};;
d) DATE=${OPTARG};;
p) PRODUKTS=${OPTARG};;
f) FORMAT=${OPTARG};;
esac
darīts

Šī ir laika cilpa, kas izmanto getopts funkcija un ts izvēles virkne-šajā gadījumā u: d: p: f:— atkārtot argumentus. The kamēr cilpa iziet cauri izvēles virknei, kurā ir karodziņi, kas tiek izmantoti argumentu nodošanai, un piešķir šim karogam paredzēto argumenta vērtību mainīgajam. opciju. The lietu paziņojums pēc tam piešķir mainīgā vērtību opciju globālajam mainīgajam, kas tiek izmantots pēc visu argumentu nolasīšanas.

Kolu nozīmes

Koli izvēles virknē nozīmē, ka atbilstošajiem karodziņiem ir nepieciešamas vērtības. Iepriekš minētajā piemērā u: d: p: f:, aiz visiem karogiem ir kols. Tas nozīmē, ka visiem karodziņiem ir nepieciešama vērtība. Ja, piemēram, d un f karodziņiem nebija paredzēta vērtība, u: dp: f būtu izvēles virkne.

Sākuma kols ieslēdz getopts "klusajā ziņošanas režīmā". Tā vietā, lai pilnībā kļūdītos skriptā, jebkurš negaidīts arguments aizpilda? opciju, un pēc vajadzības varat to meklēt vai rīkoties. Ja izvēles virknē nav sākuma kola, terminālis parāda kļūdu. Piemēram, man ir skripts no augšas, kas skaita vārdus. Tas gaida sintakse, piemēram, "stats.sh -f faila nosaukums". Bez resnās zarnas, mēģinot "stats.sh -h", es saņemu:

stats.sh -h
stats.sh: nelegāls variants -- h

Tā kā, izmantojot kolu, es savā skriptā varu ievietot rindiņu, sagaidot kaut ko līdzīgu, piemēram, - ?) echo "Nav atrasts arguments -${OPTARG}.";;. Tas ļauj man tvert un apstrādāt neparedzēto ierakstu (šajā gadījumā izvadot savu kļūdas ziņojumu).

stats.sh -h
Netika atrasts arguments -h.

Argumenti, kuru priekšā nav karodziņš, tiek ignorēti ar getopts. Ja izvēles virknē norādītie karodziņi netiek nodrošināti, kad tiek izsaukts skripts, nekas nenotiek, ja vien jūs īpaši neapstrādājat šo gadījumu savā kodā. Visi argumenti, kurus neapstrādāja getops joprojām var tvert ar parasto $1, $2, un $3 mainīgie.