Miten luodaan argumentit Bash-Scriptille

Komennot, syntaksi ja esimerkit

Voit kirjoittaa bash-komentosarjan siten, että se vastaanottaa argumentteja, jotka määritetään komentosarjan kutsuttua komentoriviltä. Tätä menetelmää käytetään, kun komentosarjan on tehtävä hieman erilainen funktio riippuen syöttöparametrien arvosta (argumentit).

Esimerkiksi sinulla voi olla käsikirjoitus nimeltä "stats.sh", joka suorittaa tiettyä operaatiota tiedostossa, kuten sanojen laskemisen. Jos haluat käyttää komentosarjaa useissa tiedostoissa, on hyvä siirtää tiedoston nimi argumenttina, jotta voit käyttää samaa komentosarjaa kaikille käsiteltäville tiedostoille. Jos esimerkiksi käsiteltävän tiedoston nimi on "kappalelista", kirjoittaisit seuraavan komentorivin:

sh stats.sh laululistalta

Argumentteja käydään käsikirjoituksen sisällä käyttäen muuttujia $ 1, $ 2, $ 3 jne., Missä $ 1 viittaa ensimmäiseen argumenttiin, $ 2 toiseen argumenttiin ja niin edelleen. Tätä kuvataan seuraavassa esimerkissä:

FILE1 = $ 1 wc $ FILE1

Luettavuuden määrittämiseksi määritä muuttujan kuvaileva nimi ensimmäisen argumentin arvoon ($ 1) ja soita sana-laskentaohjelma ( wc ) tähän muuttujaan ($ FILE1).

Jos sinulla on muuttuva määrä argumentteja, voit käyttää "$ @" -muuttujaa, joka on kaikkien syötettyjen parametrien sarja. Tämä tarkoittaa, että voit käyttää for-loopia iteratiivisesti prosessoimaan kukin, kuten seuraavassa esimerkissä on kuvattu:

FILE1 kohdassa "$ @" tehdään wc $ FILE1 tehty

Tässä on esimerkki siitä, kuinka tämä käsikirjoitus voidaan kutsua komentorivillä olevilla argumentteilla:

sh stats.sh songlist1 songlist2 songlist3

Jos argumentissa on välilyöntejä, sinun on liitettävä se yksittäisiin lainausmerkkeihin. Esimerkiksi:

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

Usein skripti kirjoitetaan siten, että käyttäjä voi lähettää argumentteja missä tahansa järjestyksessä käyttämällä lippuja. Liput-menetelmällä voit myös tehdä joitain argumentteja vapaaehtoisesti.

Oletetaan, että sinulla on käsikirjoitus, joka hakee tietokannasta tietoja, jotka perustuvat määritettyihin parametreihin, kuten "käyttäjätunnus", "päivämäärä" ja "tuote", ja tuottaa raportin tietyssä "muodossa". Nyt haluat kirjoittaa käsikirjoituksesi niin, että voit siirtää nämä parametrit, kun komentosarjaa kutsutaan. Se voi näyttää tältä:

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

Bash mahdollistaa tämän toiminnon "getopts" -toiminnolla. Edellä mainitulle esimerkille saatat käyttää getoptsia seuraavasti:

Tämä on aika -silmukka, joka käyttää "getopts" -toimintoa ja ns. "Optstring", tässä tapauksessa "u: d: p: f:", iteroitavaksi argumenttien kautta. While-loop kulkee optstringin läpi, joka sisältää lippuja, joita voidaan käyttää argumenttien siirtämiseen, ja antaa kyseiselle lipulle annetun argumentin arvon muuttujalle "option". Tapauskirja antaa sitten muuttujan "vaihtoehdon" arvon globaalille muuttujalle, jota voidaan käyttää sen jälkeen, kun kaikki argumentit on luettu.

Kynttilän paksuudet merkitsevät sitä, että vastaavat liput edellyttävät arvoja. Edellä olevassa esimerkissä kaikki liput seuraa kaksoispiste: "u: d: p: f:". Tämä tarkoittaa sitä, että kaikki liput tarvitsevat arvoa. Jos esim. "D" - ja "f" -lippujen ei oleteta olevan arvoa, optstring olisi "u: dp: f".

Punnerrunkopinosarjojen alussa, esimerkiksi ": u: d: p: f:", on täysin eri merkitys. Sen avulla voit hallita lippuja, joita ei ole edustettuna optstringissä. Tällöin "option" muuttujan arvo on asetettu "?" ja "OPTARG" -arvoksi asetetaan odottamaton lippu. Sen avulla voit näyttää sopivan virheilmoituksen virheestä käyttäjälle.

Getopts ei ota huomioon argumentteja, joita lippu ei edeltää. Jos optstringissä määritettyjä lippuja ei anneta, kun komentosarjaa kutsutaan, mitään ei tapahdu, ellet käsittele tätä tapausta erityisellä koodilla. Kaikki argumentit, joita ei käsitellä getopilla, voidaan silti kaapata tavallisilla $ 1, $ 2, jne. Muuttujilla.