Schrijf een Bash-script zodat het argumenten ontvangt die zijn opgegeven wanneer het script vanaf de opdrachtregel wordt aangeroepen. Gebruik deze methode wanneer een script een iets andere functie moet uitvoeren, afhankelijk van de waarden van de invoerparameters, ook wel argumenten.
Voorbeeld van het doorgeven van argumenten in een bash-script
Als je een script hebt ontwikkeld met de naam stats.sh die de woorden in een bestand telt, is het het beste om de bestandsnaam als argument door te geven, zodat hetzelfde script kan worden gebruikt voor alle bestanden die zullen worden verwerkt. Als de naam van het te verwerken bestand bijvoorbeeld is: muzieklijst, voer het volgende in op de opdrachtregel: sh stats.sh songlist
Argumenten zijn toegankelijk in een script met behulp van de variabelen $1, $2, $3, enzovoort. de variabele $1 verwijst naar het eerste argument, $2 naar het tweede argument, en $3 naar het derde argument. Bijvoorbeeld in het script: FILE1=$1
wc $BESTAND1
Wijs een variabele met een beschrijvende naam toe aan de waarde van het eerste argument ($1), en roep vervolgens het hulpprogramma voor het tellen van woorden (WC) aan op de variabele $BESTAND1 of wat je nog meer wilt doen. Als je een variabel aantal argumenten nodig hebt, gebruik dan de $@ variabele, wat een array is van alle invoerparameters. Deze procedure gebruikt een for-lus om ze iteratief te verwerken, zoals geïllustreerd in het volgende voorbeeld: voor FILE1 in “$@”
doen
wc $BESTAND1
klaar
Hier is een voorbeeld van hoe je dit script kunt aanroepen met argumenten vanaf de opdrachtregel: sh stats.sh songlist1 songlist2 songlist3
Als een argument spaties bevat, zet het dan tussen enkele aanhalingstekens. Bijvoorbeeld: sh stats.sh ‘nummerlijst 1’ ‘nummerlijst 2’ ‘nummerlijst 3’
Vlaggenmethode:
Vaak wordt een script geschreven zodat argumenten in willekeurige volgorde kunnen worden doorgegeven met behulp van vlaggen. Met de flags-methode kunnen sommige argumenten optioneel worden gemaakt. Schrijf bijvoorbeeld een script dat informatie ophaalt uit een database op basis van gespecificeerde parameters, zoals: gebruikersnaam, datum, en Product, en genereert een rapport in een opgegeven formaat. Het script moet zo worden geschreven dat deze parameters worden doorgegeven wanneer het script wordt aangeroepen. Het kan er als volgt uitzien: makereport -u jsmith -p notebooks -d 20-10-2011 -f pdf
class=”ql-syntax”> Bash schakelt deze functionaliteit in met de getopt functie. Gebruik voor het bovenstaande voorbeeld getopt als volgt: while getopts u:d:p:f: option
doen
geval “${option}”
in
u) GEBRUIKER=${OPTARG};;
d) DATUM=${OPTARG};;
p) PRODUCT=${OPTARG};;
f) FORMAAT=${OPTARG};;
esac
klaar
class=”ql-syntax”> Dit is een while-lus die de . gebruikt getopt functie en een zogenaamde optstring-in dit geval u:d:p:f:– om de argumenten te herhalen. De terwijl lus loopt door de optstring, die de vlaggen bevat die worden gebruikt om argumenten door te geven, en wijst de argumentwaarde voor die vlag toe aan de variabele keuze. De geval statement wijst vervolgens de waarde van de variabele toe keuze naar een globale variabele die wordt gebruikt nadat alle argumenten zijn gelezen.
Betekenissen voor dubbele punten
De dubbele punten in de optstring betekenen dat waarden vereist zijn voor de corresponderende vlaggen. In het bovenstaande voorbeeld van u:d:p:f:, worden alle vlaggen gevolgd door een dubbele punt. Dit betekent dat alle vlaggen een waarde nodig hebben. Als bijvoorbeeld de NS en F van vlaggen werd niet verwacht dat ze een waarde hadden, u:dp:f zou de optstring zijn. De beginnende dubbele punt zet getopts in ‘stille rapportagemodus’. In plaats van het script volledig te verdraaien, vult elk onverwacht argument de ? optie en u kunt die zoeken of behandelen als dat nodig is. Zonder de eerste dubbele punt in de optstring geeft de terminal een fout weer. Ik heb bijvoorbeeld het script van boven dat woorden telt. Het verwacht een syntaxis zoals “stats.sh -f bestandsnaam”. Zonder de dubbele punt, als ik “stats.sh -h” probeer, krijg ik: stats.sh -h
stats.sh: illegale optie — h
Terwijl ik met de dubbele punt een regel in mijn script kan zetten die zoiets verwacht, zoals – ?) echo “Geen -${OPTARG} argument gevonden.”;; . Hierdoor kan ik de onverwachte invoer vastleggen en afhandelen (in dit geval door mijn eigen foutmelding uit te voeren). stats.sh -h
Geen -h argument gevonden.
Argumenten die niet worden voorafgegaan door een vlag, worden genegeerd door getopt. Als vlaggen gespecificeerd in de optstring niet worden gegeven wanneer het script wordt aangeroepen, gebeurt er niets, tenzij u dit speciaal in uw code behandelt. Alle argumenten die niet worden behandeld door getops kan nog steeds worden vastgelegd met de reguliere $1, $2, en $3 variabelen.