logo

Hoe u Linux Bash-scriptargumenten en -parameters kunt doorgeven en parseren

Het parseren en doorgeven van argumenten aan bash-scripts/shellscripts lijkt veel op de manier waarop we argumenten doorgeven aan de functies binnen Bash-scripts. We zullen het daadwerkelijke proces zien van het doorgeven van de argumenten aan een script en ook kijken naar de manier om toegang te krijgen tot die argumenten binnen het script.

Argumenten doorgeven voordat je gaat rennen

We kunnen parameters doorgeven net na de naam van het script tijdens het uitvoeren van de bash-interpreteropdracht. U kunt parameters of argumenten aan het bestand doorgeven. Gewoon de opdracht om het script normaal uit te voeren door de waarde van de parameters rechtstreeks aan het script toe te voegen. Elke parameter is een door spaties gescheiden waarde die moet worden doorgegeven aan het shellscript.

bash scriptname.sh>

Met de bovenstaande opdracht wordt het script gewoon uitgevoerd zonder de parameters door te geven.



10 ml tot ons

Terwijl de onderstaande opdracht de argumenten aan het script zal doorgeven.

bash scriptname.sh parameter1 parameter2 parameter3 nth-parameter>

Bash-script uitvoeren met passerende parameters

De bovenstaande schermafbeelding toont de parameters die aan het script zijn doorgegeven, hoe we dat gaan doen, wat we in de volgende sectie zullen uitleggen. Maar op dit moment kunnen we zien dat we de parameters van buiten het script hebben ingevoerd met behulp van bash-omgevingsvariabelen. U kunt zelfs tekenreeksen en andere gegevenstypen gebruiken, maar pas op voor eventuele witruimte. Door witruimte wordt de variabele een afzonderlijke parameter. Zorg er dus vooral voor dat strings strikt tussen aanhalingstekens staan.

Commandoregelargumenten detecteren

Nu zullen we zien hoe we toegang krijgen tot die parameters binnen het script. We gebruiken het aantal doorgegeven parameters in de volgorde, dat wil zeggen dat we voor de eerste doorgegeven parameters de parameter parseren (toegang krijgen) door als variabele te gebruiken. De eerste parameter wordt opgeslagen in de variabele . Bovendien kunt u deze variabele toewijzen aan elke andere door de gebruiker gedefinieerde variabele die u leuk vindt. Voor de n-de parameter die wordt doorgegeven, kunt u $n gebruiken om toegang te krijgen tot die specifieke parameter. Hier begint de naam van de variabele met 1 omdat de bestandsnaam/scriptnaam de 0-de parameter is. Als je meer dan 9 parameters hebt, zorg er dan voor dat je { } rond het getal gebruikt, want zonder haakjes ziet bash alleen als en sluit de 0 uit, dus gebruik enzovoort in plaats van gewoon .

#!/bin/bash echo '1st parameter =  ' echo '2nd Parameter =  '>

Het bovenstaande script heeft toegang tot de parameters vanaf de opdrachtregel/shell met behulp van de positionele parameters, namelijk 1, 2, 3, enzovoort.

Toegang tot de argumenten uit het script.

Zoals u kunt zien, hebben we {} gebruikt om toegang te krijgen tot de parametervariabele getallen vanaf 10. Het script kan worden gebruikt voor lussen en while-lussen om de parameters te herhalen, maar we zullen dit in verdere secties bespreken.

Wijs de opgegeven argumenten toe aan de bash-variabele

We kunnen het ook aan andere aangepaste variabelen toewijzen om het script dynamischer te maken en het aan de behoeften aan te passen. Hoewel het bovenstaande script bij uitvoering slechts twee parameters afdrukt, kunt u zeker toegang krijgen tot meer parameters door de variabele te gebruiken als de volgorde van de parameters in getallen. Het script heeft vanaf de opdrachtregel toegang tot de positionele variabelen en kan deze op de gewenste plaatsen binnen het script gebruiken.

#!/bin/bash a= b= p=$(($a*$b)) echo 'The product of $a and $b = $p'>

Wijs de opgegeven argumenten toe aan de bash-variabele

Het bovenstaande script heeft toegang tot de positionele parameters, d.w.z. en die in het script zijn doorgegeven, en slaat de door de gebruiker gedefinieerde variabelen op, zodat u ze later kunt openen en dienovereenkomstig kunt wijzigen. We hebben ook toegang tot meer parameters met behulp van iteratieve methoden, zoals we in de komende secties zullen zien.

We hebben ook de mogelijkheid om te controleren op NULL of lege parameters die zijn doorgegeven met behulp van de vlaggen -z of -n. Hieruit kunnen we verifiëren of de parameters zijn doorgegeven of niet.

#!/bin/bash if [[ -z  ]]; then echo 'No parameter passed.' else echo 'Parameter passed = ' fi>

Controleren op al dan niet doorgegeven positionele parameters.

Met dit script kunnen we detecteren of er positionele parameters zijn doorgegeven of dat er niets is doorgegeven. De vlag -z controleert op NULL of niet-geïnitialiseerde variabelen in BASH. De vlag -z retourneert true als de doorgegeven variabele NULL of niet-geïnitialiseerd is. Daarom kunnen we gebruik maken van eenvoudige If-else-instructies om de doorgegeven parameters te detecteren.

We kunnen ook de vlag -n gebruiken die true retourneert als er geen parameters worden doorgegeven, dus we moeten gebruik maken van ! om de toestand om te keren.

js base64-decodering

Zoals volgt:

#!/bin/bash if [[ ! -n  ]]; then echo 'No parameter passed.' else echo 'Parameter passed = ' fi>

Dit script geeft ook dezelfde uitvoer, maar we maken gebruik van de vlag -n in plaats van -z.

Meerdere argumenten lezen met de For- of While-lus

We kunnen @ variabele gebruiken om toegang te krijgen tot elke parameter die via de opdrachtregel aan het script wordt doorgegeven. Het is een speciale variabele die de reeks variabelen in BASH bevat. In dit geval gebruiken we het alleen, dus het bevat de array van positionele parameters die zijn doorgegeven. We kunnen het gebruiken om de doorgegeven parameters te herhalen met behulp van lussen of while-lussen.

#!/bin/bash for i in $@ do echo -e '$i
' done>

Het gebruik van lussen en @-variabelen om toegang te krijgen tot de parameters als array-elementen.

We hebben een op bereik gebaseerde for-lus gebruikt om te herhalen totdat er elementen in de @-array staan. We herhalen eenvoudigweg de array en drukken het element af. We kunnen het eenvoudigweg toewijzen, de waarden wijzigen en de vereiste wijzigingen aanbrengen in de parameters en argumenten om het gewenste resultaat van het script te bereiken.

OF

We kunnen de argumenten ook afdrukken met behulp van de while-lus en de omgevingsvariabelen van BASH.

#!/bin/bash i=$(($#-1)) while [ $i -ge 0 ]; do echo ${BASH_ARGV[$i]} i=$((i-1)) done>

Gebruik een while-lus om de doorgegeven parameters te herhalen.

ubuntu welk commando

We gebruiken de variabele ‘ # ‘ omdat het het aantal doorgegeven parameters bevat. We initialiseren het aantal parameters en halen er één weg omdat we een array gaan gebruiken om eroverheen te itereren. Dus zoals gewoonlijk begint de index van de array vanaf 0. Omdat deze array wordt geïnitialiseerd vanaf het laatste element of de laatste parameter die is doorgegeven, moeten we de teller verlagen tot 0 om elke parameter af te drukken in de volgorde waarin deze is doorgegeven. We gebruiken eenvoudigweg de BASH_ARGV-array om toegang te krijgen tot de parameters en de waarde ervan af te drukken. Ook verlagen we bij elke iteratie de waarde van i- de iterator of teller met één met behulp van de rekenkundige dubbele accolades. Hieruit printen we eenvoudigweg elke parameter die aan het script is doorgegeven met behulp van een while-lus, zoals blijkt uit de uitvoerscreenshot.

Lezen met parameternamen

Getopts gebruiken om argumenten en parameters te ontleden

We kunnen het getopts-programma/commando gebruiken om de argumenten te parseren die aan het script zijn doorgegeven in de opdrachtregel/terminal door gebruik te maken van lussen en switch-case-instructies.

#!/bin/bash while getopts n:c: option do case '${option}' in n)nation=${OPTARG};; c)code=${OPTARG};; esac done echo 'Nation : $nation' echo 'code : $code'>

Getopts gebruiken om argumenten en parameters te ontleden

Met behulp van getopts kunnen we de positionele argumenten/parameters vanaf de opdrachtregel rechtstreeks aan de bash-variabelen toewijzen. Hierdoor kunnen we de parameters mooi en systematisch beheren. In het bovenstaande script hebben we twee argumenten gebruikt om de bash-variabelen op te slaan met behulp van de getopts-syntaxis, while-lussen en switch-case-instructies.

Waarden van alle argumenten afdrukken

We kunnen de argumenten afdrukken die aan het script zijn doorgegeven door een eenvoudige, krachtige variabele ‘@’ die alle doorgegeven parameters opslaat.

#!/bin/bash echo 'The arguments passed in are : $@'>

Waarden van alle argumenten afdrukken

Toegang tot het aantal doorgegeven parameters

We kunnen ook de variabele ‘#’ gebruiken om toegang te krijgen tot het aantal parameters dat vanaf de opdrachtregel is doorgegeven. De # variabele bevat feitelijk het aantal parameters/argumenten die in het script worden doorgegeven.

#!/bin/bash echo 'The number of arguments passed in are : $#'>

Toegang tot het aantal doorgegeven parameters

Hieronder volgden het proces en de specificatie van het doorgeven en parseren van de variabelen in het bash-script. De logica van het verschuiven en wijzigen van de variabelen ligt in de handen van de gebruiker. Dit was slechts een demonstratie van het doorgeven en ontleden van de argumenten van de opdrachtregel naar het script om ze dynamischer te maken.