Du kan skrive et bash-skript slik at det mottar argumenter angitt når skriptet kalles fra kommandolinjen. Denne metoden brukes når et skript må utføre en litt annerledes funksjon avhengig av verdiene til inngangsparametere (argumentene).
For eksempel kan du ha et skript som heter "stats.sh" som utfører en bestemt operasjon på en fil, for eksempel å telle ordene. Hvis du vil kunne bruke det skriptet på mange filer, er det best å sende filnavnet som et argument, slik at du kan bruke det samme skriptet for alle filene som skal behandles. Hvis for eksempel navnet på filen som skal behandles er "sangliste", vil du legge inn følgende kommandolinje:
sh stats.sh sangliste
Argumenter blir åpnet i et skript ved hjelp av variablene $ 1, $ 2, $ 3, etc., hvor $ 1 refererer til det første argumentet, $ 2 til det andre argumentet og så videre. Dette illustreres i følgende eksempel: FIL1 = $ 1wc $ FILE1
For lesbarhet, tilordne en variabel med et beskrivende navn til verdien av det første argumentet ($ 1), og kaller deretter ordtellingverktøyet (wc) på denne variabelen ($ FILE1). Hvis du har et variabelt antall argumenter, kan du bruke "$ @" -variabelen, som er en rekke av alle inngangsparametrene. Dette betyr at du kan bruke en for-loop til iterativt å behandle hver, som illustrert i følgende eksempel: for FILE1 i "$ @"gjørewc $ FILE1ferdig
Her er et eksempel på hvordan du kan ringe dette skriptet med argumenter fra kommandolinjen: sh stats.sh sangliste1 sangliste2 sangliste3
Hvis et argument har mellomrom, må du vedlegge det med enkelt anførselstegn. For eksempel: sh stats.sh 'sangliste 1' 'sangliste 2' 'sangliste 3'
Ofte skrives et skript slik at brukeren kan passere i argumenter i hvilken som helst rekkefølge ved hjelp av flagg. Med flaggmetoden kan du også gjøre noen av argumentene valgfrie. La oss si at du har et skript som henter informasjon fra en database basert på angitte parametere, for eksempel "brukernavn", "dato" og "produkt", og genererer en rapport i et spesifisert "format". Nå vil du skrive skriptet ditt slik at du kan passere i disse parameterne når skriptet kalles. Det kan se slik ut: makereport -u jsmith -p notatbøker -d 10-20-2011 -f pdf
Bash gjør denne funksjonaliteten mulig med "getopts" -funksjonen. For eksempelet ovenfor kan du bruke getopts som følger: mens du får deg: d: p: f: alternativgjøresaken "$ {option}"iu) BRUKER = $ {OPTARG} ;;d) DATO = $ {OPTARG} ;;p) PRODUKT = $ {OPTARG} ;;f) FORMAT = $ OPTARG ;;ESACferdig
Dette er en stundsløyfe som bruker "getopts" -funksjonen og en såkalt "optstring", i dette tilfellet "u: d: p: f:", for å iterere gjennom argumentene. Mens-loop går gjennom optstringen, som inneholder flaggene som kan brukes til å passere argumenter, og tilordner argumentverdien som er gitt for dette flagget til variabelen "alternativ". Case-statementen tilordner deretter verdien av variabelen "alternativ" til en global variabel som kan brukes etter at alle argumentene er lest. Kolonene i optstringen betyr at verdier kreves for de tilsvarende flaggene. I eksemplet ovenfor blir alle flaggene etterfulgt av et kolon: "u: d: p: f:". Dette betyr at alle flaggene trenger en verdi. Hvis f.eks. "D" og "f" -flaggene ikke forventes å ha en verdi, ville optstringen være "u: dp: f". Et kolon i begynnelsen av optstringen, for eksempel ": u: d: p: f:", har en helt annen betydning. Den lar deg håndtere flagg som ikke er representert i optstringen. I så fall er verdien av "alternativ" -variabelen satt til "?" og verdien av "OPTARG" er satt til det uventede flagget. Den lar deg vise en passende feilmelding som informerer brukeren om feilen. Argumenter som ikke går foran et flagg, ignoreres av getopts. Hvis flagg som er angitt i opptegningen, ikke oppgis når skriptet kalles, skjer ingenting, med mindre du spesielt håndterer denne saken i koden din. Eventuelle argumenter som ikke håndteres av getops kan fremdeles bli tatt med de vanlige $ 1, $ 2, etc. variablene.