Kaip perduoti argumentus į Bash-scenarijų

Komandos, sintaksė ir pavyzdžiai

Galite rašyti bash scenarijų taip, kad jis gautų argumentus, nurodytus, kai scenarijus yra vadinamas iš komandinės eilutės. Šis metodas naudojamas, kai scenarijus turi atlikti šiek tiek kitokią funkciją, priklausomai nuo įvesties parametrų reikšmės (argumentai).

Pavyzdžiui, galite turėti scenarijų, vadinamą "stats.sh", kuris atlieka konkrečią operaciją su failais, pvz., Skaičiuojant jo žodžius. Jei norite, kad galėtumėte naudoti šį scenarijų daugelyje failų, geriausia perduoti failo vardą kaip argumentą, kad galėtumėte naudoti tą patį scenarijų visiems apdorojamiems failams. Pavyzdžiui, jei apdorojamojo failo pavadinimas yra "songlist", įvesite šią komandų eilutę:

sh stats.sh songlist

Argumentai yra pasiekiami scenarijų, naudojant kintamuosius $ 1, $ 2, $ 3 ir tt, kur $ 1 reiškia pirmąjį argumentą, $ 2 į antrą argumentą ir tt. Tai parodyta šiame pavyzdyje:

FILE1 = $ 1 wc $ FILE1

Norėdami skaityti, priskirkite kintamąjį su aprašomuoju pavadinimu į pirmojo argumento reikšmę ($ 1) ir paskui paskambinkite į šį kintamąjį ($ FILE1) žodžių skaitiklio įrankį ( wc ).

Jei turite kintamą skaičių argumentų, galite naudoti kintamąjį "$ @", kuris yra visų įvesties parametrų masyvas. Tai reiškia, kad galite naudoti raktą, kad būtų pakartotinai apdoroti kiekvieną, kaip parodyta šiame pavyzdyje:

už FILE1 "$ @" atlikite wc $ FILE1

Štai pavyzdys, kaip skambinti šiuo scenarijais su argumentais iš komandinės eilutės:

sh stats.sh songlist1 songlist2 songlist3

Jei argumentas turi tarpų, jį reikia pridėti tik vienu kabučių. Pavyzdžiui:

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

Dažnai scenarijus yra parašytas taip, kad vartotojas gali perduoti argumentus bet kuria tvarka naudodamas vėliavą. Naudodami vėliavų metodą, kai kuriuos argumentus taip pat galite padaryti pasirinktinai.

Leiskite pasakyti, kad turite scenarijų, kuris iš duomenų bazės gauna informaciją pagal nustatytus parametrus, pvz., "Naudotojo vardą", "datą" ir "produktą", ir generuoja ataskaitą nurodytu "formatu". Dabar norite parašyti scenarijų, kad galėtumėte perduoti šiuos parametrus, kai skriptas yra vadinamas. Tai gali atrodyti taip:

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

Bash leidžia šią funkciją naudoti "getopts". Pavyzdžiui, galite naudoti getopts taip:

Tai laiko-ciklas, kuris naudoja "getopts" funkciją ir vadinamą "optstring", šiuo atveju "u: d: p: f:", kad pakartotų per argumentus. Laiko ciklas eina per optstring, kuriame yra vėliavos, kurias galima naudoti norint perduoti argumentus, ir priskiria tai vėliava nurodytą argumento reikšmę kintamam "option". Tada bylos ataskaita priskiria kintamojo "option" reikšmę į globalinį kintamąjį, kuris gali būti naudojamas po to, kai visi argumentai buvo perskaityti.

Optstring dvitaškiai reiškia, kad vertes reikia atitinkamoms vėliavoms. Pirmiau pateiktame pavyzdyje visoms vėliavoms paliekama dvitaškis: "u: d: p: f:". Tai reiškia, kad visoms vėliavoms reikia vertės. Jei, pavyzdžiui, "d" ir "f" vėliavos neturėtų vertės, optstring būtų "u: dp: f".

Kvapas optstring pradžioje, pavyzdžiui ": u: d: p: f:", turi visiškai kitokią prasmę. Tai leidžia tvarkyti vėliaveles, kurios nėra pateiktos optstring. Tokiu atveju "varianto" kintamojo vertė yra "?" ir "OPTARG" reikšmė yra nustatoma kaip netikėta vėliava. Tai leidžia rodyti tinkamą klaidos pranešimą, informuojantį naudotoją apie klaidą.

Argumentai, prieš kuriuos nėra vėliavos, ignoruoja getopts. Jei optstring nurodytos vėliavos nėra pateikiamos, kai scenarijus yra vadinamas, nieko neįvyksta, nebent jūs specialiai tvarkysite šį atvejį savo kodu. Bet kurie argumentai, kuriuos neapdorojo gatvėse, vis dar gali būti užfiksuoti su įprastais kintamaisiais $ 1, $ 2 ir tt.