Hoe om te gaan met opdrachtregelargumenten in een bash-script

How Handle Command Line Arguments Bash Script



In veel gevallen vereisen bash-scripts argumentwaarden om invoeropties voor het script te bieden. U kunt opdrachtregelargumenten in een bash-script op twee manieren afhandelen. Een daarvan is door gebruik te maken van argumentvariabelen en een andere is door gebruik te maken van getopt functie. Hoe u omgaat met opdrachtregelargumenten wordt in deze zelfstudie getoond.

Argumentvariabelen gebruiken:

Argumentvariabele begint vanaf $ 0. De naam van het hoofdscriptbestand wordt opgeslagen in $0 die argumentwaarden ontvangt van opdrachtregelargumenten. Als twee argumenten in de opdrachtregel worden doorgegeven, worden de argumentwaarden achtereenvolgens ontvangen in de variabelen $1 en $2.







Voorbeeld -1: Drie numerieke waarden verzenden als argumenten

Maak een bash-bestand en voeg de volgende code toe. Het script ontvangt drie argumentwaarden en wordt opgeslagen in $1, $2 en $3. Het telt het totale aantal argumenten, print argumentwaarden met lus en zonder lus. Druk ten slotte de som van alle argumentwaarden af.



#!/bin/bash

# Totaal aantal argumenten tellen
gooide uit 'Totaal aantal argumenten: $#'

# Argumentwaarden afzonderlijk lezen
gooide uit 'Eerste argumentwaarde: $1'
gooide uit 'Tweede argumentwaarde: $2'
gooide uit 'Derde argumentwaarde: $3'

# Argumentwaarden lezen met lus
voorargvalin ' [e-mail beveiligd]'
doen
gooide uit -N '$argval'
gedaan

# Argumentwaarden toevoegen
som= $(($ 1+$ 2+$ 3))

# print het resultaat
gooide uit -En 'NResultaat van som =$som'

Voer het bash-bestand uit met drie numerieke argumentwaarden.



$bashcmdline1.shvijftig 35 vijftien





Voorbeeld -2: Bestandsnaam als argument gebruiken

Maak een bash-bestand en voeg de volgende code toe om het totale aantal tekens van een bestand te tellen. Hier wordt bestandsnaam doorgegeven als opdrachtregelargument.

#!/bin/bash
bestandsnaam=$ 1
totalchar=``wc -C $bestandsnaam``
gooide uit 'Totaal aantal tekens zijn$ totaalchar'

Voer het bash-script uit met de bestandsnaam als enkele argumentwaarde en voer een andere opdracht uit om het totale aantal tekens van dat bestand te controleren. Hier wordt het bestand employee.txt gebruikt als argumentwaarde. Het totale aantal tekens van het employee.txt-bestand is 204.



$bashcmdline2.sh werknemer.txt
$wc -Cwerknemer.txt

De getopt-functie gebruiken:

Als u gegevens in een database of een ander bestand wilt opslaan of een rapport in een bepaald formaat wilt maken op basis van opdrachtregelargumenten, dan: getopt functie is de beste optie om de taak uit te voeren. Het is een ingebouwde linux-functie. U kunt deze functie dus gemakkelijk in uw script gebruiken om opgemaakte gegevens vanaf de opdrachtregel te lezen.

Voorbeeld -1: Argumenten lezen door de functie getopts

Maak een bash-bestand en voeg het volgende script toe om het gebruik van te begrijpen getopt functie. 'getopts'-functie wordt gebruikt met while-lus om opdrachtregelargumentopties en argumentwaarden te lezen. Hier worden 4 opties gebruikt, namelijk: 'in M' en 'En' . case statement wordt gebruikt om de specifieke optie te matchen en de argumentwaarde op te slaan in een variabele. Druk ten slotte de waarden van de variabele af.

#!/bin/bash
terwijl getopt ':in mij:'boos;doen
geval $ arg in
l) ID kaart=$OPTARG;;
N) Naam=$OPTARG;;
m) Fabricage datum=$OPTARG;;
En) Vervaldatum=$OPTARG;;
esac
gedaan
gooide uit -En 'N$ID $Naam $Manufacturing_date $Expire_dateN'

Voer het bestand uit met de volgende opties en argumentwaarden. Hier is p100 de waarde van -i optie, 'Hot Cake' is de waarde van -n optie, '01-01-2018′ is de waarde van -m optie en '06-01-2018′ is de waarde van - e optie.

$bashcmdline3.sh-lp001-N 'Warme cake' -m '01 -01-2018 ' -En '06 -01-2018 '

Wanneer u eenvoudige waarden in een script moet verzenden, is het beter om argumentvariabelen te gebruiken. Maar als u gegevens op een geformatteerde manier wilt verzenden, is het beter om de functie getopts te gebruiken om argumentwaarden op te halen. Kijk voor meer informatie de video !