Du kan skriva ett bash-script så att det får argument som anges när man skriptet kallas från kommandoraden. Denna metod används när ett skript måste utföra en något annorlunda funktion beroende på värdena på ingångsparametrarna (argumenten).
Till exempel kan du ha ett skript som heter "stats.sh" som utför en viss operation i en fil, till exempel att räkna sina ord. Om du vill kunna använda det här skriptet på många filer är det bäst att skicka filnamnet som ett argument, så att du kan använda samma skript för alla filer som ska behandlas. Om namnet på filen som ska behandlas är "Songlist", skulle du ange följande kommandorad:
sh stats.sh sånglista
Argumenterna nås inuti ett skript med variablerna $ 1, $ 2, $ 3, etc., där $ 1 avser det första argumentet, $ 2 till det andra argumentet och så vidare. Detta illustreras i följande exempel: FIL1 = $ 1wc $ FILE1
För läsbarhet, tilldela en variabel med ett beskrivande namn till värdet av det första argumentet ($ 1) och ring sedan ordräkningsverktyget (wc) på denna variabel ($ FILE1). Om du har ett variabelt antal argument kan du använda variabeln "$ @", som är en uppsättning av alla ingångsparametrar. Det betyder att du kan använda en för-loop för att iterativt behandla varje, som illustreras i följande exempel: för FILE1 i "$ @"dowc $ FILE1Gjort
Här är ett exempel på hur man ringer det här skriptet med argument från kommandoraden: sh stats.sh songlist1 songlist2 songlist3
Om ett argument har mellanslag måste du bifoga det med enkla citat. Till exempel: sh stats.sh 'låtlista 1' 'låtlista 2' 'låtlista 3'
Ofta skrivs ett skript så att användaren kan skicka in argument i vilken ordning som helst som använder flaggor. Med flaggmetoden kan du också göra några av argumenten valfria. Låt säga att du har ett skript som hämtar information från en databas baserat på angivna parametrar, till exempel "användarnamn", "datum" och "produkt" och genererar en rapport i ett angivet "format". Nu vill du skriva ditt skript så att du kan passera i dessa parametrar när skriptet heter. Det kan se ut så här: makereport -u jsmith -p anteckningsböcker -d 10-20-2011 -f pdf
Bash möjliggör denna funktion med funktionen "getopts". För ovanstående exempel kan du använda getopts enligt följande: medan getopts u: d: p: f: optiondofallet "$ {option}"iu) USER = $ {OPTARG} ;;d) DATUM = $ {OPTARG} ;;p) PRODUKT = $ {OPTARG} ;;f) FORMAT = $ OPTARG ;;esacGjort
Detta är en stundslinga som använder funktionen "getopts" och en så kallad "optstring", i det här fallet "u: d: p: f:", för att iterera genom argumenten. Undergången går genom optsträngen, som innehåller flaggor som kan användas för att överföra argument och tilldelar argumentets värde för den här flaggan till variabeln "alternativ". Case-statementet tilldelar sedan värdet av variabeln "option" till en global variabel som kan användas efter att alla argument har lästs. Kolonerna i optstringen betyder att värden krävs för motsvarande flaggor. I ovanstående exempel följs alla flaggor av ett kolon: "u: d: p: f:". Det betyder att alla flaggor behöver ett värde. Om exempelvis "d" och "f" -flagen inte förväntades ha ett värde skulle optstringen vara "u: dp: f". En kolon i början av optstringen, till exempel ": u: d: p: f:", har en helt annan betydelse. Det låter dig hantera flaggor som inte är representerade i optstringen. I så fall ställs värdet på "alternativ" -variabeln till "?" och värdet på "OPTARG" är inställt på den oväntade flaggan. Den låter dig visa ett lämpligt felmeddelande som informerar användaren om misstaget. Argument som inte föregås av en flagga ignoreras av getopts. Om flaggor som anges i optstring inte tillhandahålls när skriptet heter, inträffar inget, om inte du speciellt hanterar det här fallet i din kod. Eventuella argument som inte hanteras av getops kan fortfarande fångas med de vanliga variablerna $ 1, $ 2, etc.