U kunt een bash-script zo schrijven dat het argumenten ontvangt die zijn opgegeven toen het script werd aangeroepen vanaf de opdrachtregel. Deze methode wordt gebruikt wanneer een script een iets andere functie moet uitvoeren, afhankelijk van de waarden van invoerparameters (de argumenten).
U hebt bijvoorbeeld een script met de naam "stats.sh" waarmee een bepaalde bewerking op een bestand wordt uitgevoerd, zoals het tellen van de woorden. Als u dat script in veel bestanden wilt gebruiken, kunt u het best de bestandsnaam als een argument doorgeven, zodat u hetzelfde script kunt gebruiken voor alle bestanden die moeten worden verwerkt. Als de naam van het te verwerken bestand bijvoorbeeld "songlist" is, voert u de volgende opdrachtregel in:
sh stats.sh songlist
Argumenten worden binnen een script gebruikt met de variabelen $ 1, $ 2, $ 3, etc., waarbij $ 1 verwijst naar het eerste argument, $ 2 naar het tweede argument, enzovoort. Dit wordt geïllustreerd in het volgende voorbeeld: FILE1 = $ 1wc $ FILE1
Voor leesbaarheid, wijs een variabele met een beschrijvende naam toe aan de waarde van het eerste argument ($ 1) en roep vervolgens het hulpprogramma voor woordentelling (wc) op deze variabele aan ($ FILE1). Als u een variabel aantal argumenten hebt, kunt u de variabele "$ @" gebruiken, een array met alle invoerparameters. Dit betekent dat u een for-loop kunt gebruiken om deze telkens iteratief te verwerken, zoals geïllustreerd in het volgende voorbeeld: voor FILE1 in "$ @"dowc $ FILE1gedaan
Hier is een voorbeeld van hoe dit script met argumenten uit de opdrachtregel moet worden aangeroepen: sh stats.sh songlist1 songlist2 songlist3
Als een argument spaties heeft, moet u het met enkele aanhalingstekens omsluiten. Bijvoorbeeld: sh stats.sh 'songlist 1' 'songlist 2' 'songlist 3'
Vaak is een script zo geschreven dat de gebruiker argumenten in elke volgorde met behulp van vlaggen kan doorgeven. Met de vlaggenmethode kunt u sommige van de argumenten ook optioneel maken. Stel dat u een script hebt dat informatie ophaalt uit een database op basis van opgegeven parameters, zoals 'gebruikersnaam', 'datum' en 'product', en genereert een rapport in een opgegeven 'indeling'. Nu wilt u uw script schrijven zodat u deze parameters kunt doorgeven wanneer het script wordt aangeroepen. Het ziet er misschien als volgt uit: makereport -u jsmith -p notebooks -d 10-20-2011 -f pdf
Bash maakt deze functionaliteit mogelijk met de "getopts" -functie. Voor het bovenstaande voorbeeld zou u getopts als volgt kunnen gebruiken: while getopts u: d: p: f: optiedocase "$ {option}"inu) GEBRUIKER = $ {OPTARG} ;;d) DATE = $ {OPTARG} ;;p) PRODUCT = $ {OPTARG} ;;f) FORMAT = $ OPTARG ;;esacgedaan
Dit is een while-lus die de "getopts" -functie gebruikt en een zogenaamde "optstring", in dit geval "u: d: p: f:", om de argumenten te doorlopen. De while-lus loopt door de optstring, die de vlaggen bevat die kunnen worden gebruikt om argumenten door te geven, en wijst de argumentwaarde die voor die vlag is gegeven toe aan de variabele "optie". De case-statement wijst vervolgens de waarde van de variabele "option" toe aan een globale variabele die kan worden gebruikt nadat alle argumenten zijn gelezen. De dubbele punten in de optstring betekenen dat waarden zijn vereist voor de bijbehorende vlaggen. In het bovenstaande voorbeeld worden alle vlaggen gevolgd door een dubbele punt: "u: d: p: f:". Dit betekent dat alle vlaggen een waarde nodig hebben. Als bijvoorbeeld de vlaggen "d" en "f" naar verwachting geen waarde hebben, is de optstring "u: dp: f". Een dubbele punt aan het begin van de optstring, bijvoorbeeld ": u: d: p: f:", heeft een geheel andere betekenis. Hiermee kunt u vlaggen afhandelen die niet worden weergegeven in de optstring. In dat geval is de waarde van de variabele "option" ingesteld op "?" en de waarde van "OPTARG" is ingesteld op de onverwachte vlag. Hiermee kunt u een geschikte foutmelding weergeven die de gebruiker op de hoogte stelt van de fout. Argumenten die niet worden voorafgegaan door een vlag worden door getopts genegeerd. Als vlaggen die zijn opgegeven in de optstring niet worden opgegeven wanneer het script wordt aangeroepen, gebeurt er niets, tenzij u speciaal deze kwestie in uw code verwerkt. Alle argumenten die niet worden afgehandeld door getops kunnen nog steeds worden vastgelegd met de normale variabelen van $ 1, $ 2, etc.