logo

Kako posredovati in razčleniti argumente in parametre skripta Bash za Linux

Razčlenjevanje in posredovanje argumentov v skripte bash/skripte lupine je precej podobno načinu, na katerega posredujemo argumente funkcijam znotraj skriptov Bash. Videli bomo dejanski postopek posredovanja argumentov skriptu in pogledali tudi način dostopa do teh argumentov znotraj skripta.

Posredovanje argumentov pred izvajanjem

Med izvajanjem ukaza tolmača bash lahko posredujemo parametre takoj za imenom skripta. V datoteko lahko posredujete parametre ali argumente. Samo ukaz za normalno izvajanje skripta z dodajanjem vrednosti parametrov neposredno v skript. Vsak parameter je vrednost, ločena s presledkom, ki se posreduje lupinskemu skriptu.

bash scriptname.sh>

Zgornji ukaz bo samo zagnal skript brez posredovanja parametrov.



Medtem ko bo spodnji ukaz posredoval argumente skriptu.

bash scriptname.sh parameter1 parameter2 parameter3 nth-parameter>

Izvajanje bash skripta s posredovanjem parametrov

Zgornji posnetek zaslona prikazuje parametre, posredovane skriptu, kako bomo to naredili, kar bomo razložili v naslednjem razdelku. Toda zdaj lahko vidimo, da smo parametre posredovali zunaj skripta z uporabo spremenljivk okolja bash. Uporabite lahko celo nize in druge tipe podatkov, vendar pazite na presledke. Prazen prostor bo spremenil spremenljivko v ločen parameter. Še posebej pri nizih bodite previdni, da jih strogo obdate z narekovaji.

popolna tabela resnic seštevalnika

Zaznavanje argumentov ukazne vrstice

Zdaj bomo videli, kako dostopamo do teh parametrov znotraj skripta. Uporabili bomo število posredovanih parametrov v vrstnem redu, tj. za prve posredovane parametre bomo razčlenili (dostopali) do parametra z uporabo kot spremenljivke. Prvi parameter je shranjen v spremenljivki . Poleg tega lahko to spremenljivko dodelite kateri koli drugi uporabniško definirani spremenljivki. Za n-ti posredovani parameter lahko uporabite $n za dostop do tega parametra. Tu se ime spremenljivke začne z 1, ker je ime datoteke/ime skripta 0. parameter. Če imate več kot 9 parametrov, ne pozabite uporabiti { } okoli številke, saj bo brez oklepaja bash videl samo 10 $ kot in izključil 0, zato uporabite in tako naprej namesto preprosto 10 $.

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

Zgornji skript lahko dostopa do parametrov iz ukazne vrstice/lupine z uporabo pozicijskih parametrov, ki so 1, 2, 3 itd.

algoritem globinsko iskanje

Dostop do argumentov iz skripta.

Kot lahko vidite, smo uporabili {} za dostop do številk spremenljivke parametra od 10 naprej. Skript je mogoče uporabiti za zanke in zanke while za ponavljanje parametrov, vendar bomo o tem razpravljali v naslednjih razdelkih.

Dodelite podane argumente spremenljivki Bash

Lahko ga dodelimo tudi drugim spremenljivkam po meri, da naredimo skript bolj dinamičen in ga oblikujemo glede na potrebe. Čeprav bo zgornji skript ob zagonu natisnil samo dva parametra, zagotovo lahko dostopate do več parametrov z uporabo spremenljivke kot vrstnega reda parametrov v številkah. Skript lahko dostopa do pozicijskih spremenljivk iz ukazne vrstice in jih uporablja na zahtevanih mestih, kjer koli je to potrebno znotraj skripta.

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

Dodelite podane argumente spremenljivki Bash

Zgornji skript dostopa do pozicijskih parametrov, tj. in , posredovanih v skript, in shrani uporabniško definirane spremenljivke za poznejši dostop do njih in njihovo ustrezno spreminjanje. Prav tako lahko dostopamo do več parametrov z uporabo iterativnih metod, kot bomo videli v naslednjih razdelkih.

Prav tako imamo možnost preveriti morebitne NULL ali prazne parametre, posredovane z uporabo zastavic -z ali -n. Iz tega lahko preverimo, ali so bili parametri posredovani ali ne.

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

Preverjanje, ali so pozicijski parametri posredovani ali ne.

S tem skriptom lahko zaznamo, ali so bili posredovani kakršni koli pozicijski parametri ali nič. Zastavica -z preveri morebitne NULL ali neinicializirane spremenljivke v BASH. Zastavica -z vrne true, če je posredovana spremenljivka NULL ali ni inicializirana. Zato lahko uporabimo osnovne stavke If-else za odkrivanje posredovanih parametrov.

Uporabimo lahko tudi zastavico -n, ki vrne true, če ni posredovan noben parameter, zato moramo uporabiti ! obrniti stanje.

Kot sledi:

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

Tudi ta skript bo dal enak rezultat, vendar uporabljamo zastavico -n namesto -z.

ipconfig za ubuntu

Branje več argumentov z zanko For ali While

Spremenljivko @ lahko uporabimo za dostop do vsakega parametra, posredovanega skriptu prek ukazne vrstice. To je posebna spremenljivka, ki vsebuje niz spremenljivk v BASH. V tem primeru ga uporabljamo samega, zato vsebuje niz posredovanih pozicijskih parametrov. Lahko ga uporabimo za ponavljanje parametrov, posredovanih z uporabo zank ali zanke while.

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

Uporaba zank in spremenljivke @ za dostop do parametrov kot elementov polja.

Za ponavljanje smo uporabili zanko for, ki temelji na obsegu, dokler ni elementov v matriki @. Enostavno ponovimo matriko in natisnemo element. Lahko ga preprosto dodelimo, spremenimo vrednosti in izvedemo zahtevane spremembe parametrov in argumentov, da dosežemo želeni rezultat skripta.

ALI

Argumente lahko natisnemo tudi z uporabo zanke while in okoljskih spremenljivk BASH.

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

Uporaba zanke while za ponavljanje posredovanih parametrov.

Uporabljamo spremenljivko ' # ' saj vsebuje število posredovanih parametrov. Število parametrov inicializiramo in enega odvzamemo, saj bomo uporabili niz za ponavljanje po njem. Torej, kot običajno, se indeks matrike začne z 0. Ker je ta matrika inicializirana od zadnjega posredovanega elementa ali parametra, moramo zmanjšati števec do 0, da natisnemo vsak parameter v vrstnem redu, kot je bil posredovan. Preprosto uporabimo matriko BASH_ARGV za dostop do parametrov in tiskanje njene vrednosti. Prav tako pri vsaki ponovitvi zmanjšamo vrednost iteratorja ali števca za eno z uporabo aritmetičnega dvojnega oklepaja. Iz tega preprosto natisnemo vsak parameter, posredovan skriptu, z uporabo zanke while, kot je prikazano na izhodnem posnetku zaslona.

povezan seznam

Branje z imeni parametrov

Uporaba getopts za razčlenjevanje argumentov in parametrov

Program/ukaz getopts lahko uporabimo za razčlenitev argumentov, posredovanih skriptu v ukazni vrstici/terminalu z uporabo zank in stavkov za zamenjavo velikih in malih črk.

#!/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'>

Uporaba getopts za razčlenjevanje argumentov in parametrov

Z uporabo getopts lahko dodelimo položajne argumente/parametre iz ukazne vrstice neposredno spremenljivkam bash. To nam omogoča, da parametre upravljamo lepo in sistematično. V zgornjem skriptu smo uporabili dva argumenta za shranjevanje spremenljivk bash z uporabo sintakse getopts, medtem ko zank in stavkov za preklop med velikimi in malimi črkami.

Tiskanje vrednosti vseh argumentov

Argumente, posredovane skriptu, lahko natisnemo s preprosto zmogljivo spremenljivko '@', ki shrani vse posredovane parametre.

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

Tiskanje vrednosti vseh argumentov

Dostop do števila posredovanih parametrov

Za dostop do števila parametrov, posredovanih iz ukazne vrstice, lahko uporabimo tudi spremenljivko '#'. Spremenljivka # v bistvu vsebuje število parametrov/argumentov, ki so posredovani v skript.

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

Dostop do števila posredovanih parametrov

V nadaljevanju sta bila postopek in specifikacija posredovanja in razčlenjevanja spremenljivk v skriptu bash. Logika premikanja in spreminjanja spremenljivk je v rokah uporabnika. To je bil le prikaz posredovanja in razčlenjevanja argumentov iz ukazne vrstice v skript, da postanejo bolj dinamični.