Kaip perduoti ir išanalizuoti Linux Bash scenarijaus argumentus ir parametrus
Argumentų analizė ir perdavimas į bash scenarijus / apvalkalo scenarijus yra gana panašus į būdą, kuriuo mes perduodame argumentus funkcijoms Bash scenarijuose. Pamatysime tikrąjį argumentų perdavimo scenarijui procesą ir taip pat pažiūrėsime, kaip pasiekti tuos argumentus scenarijaus viduje.
Argumentų perdavimas prieš bėgimą
Vykdydami bash interpreter komandą galime perduoti parametrus iškart po scenarijaus pavadinimo. Į failą galite perduoti parametrus arba argumentus. Tiesiog komanda, skirta normaliam scenarijui paleisti, pridedant parametrų reikšmes tiesiai į scenarijų. Kiekvienas parametras yra tarpais atskirta reikšmė, perduodama apvalkalo scenarijui.
bash scriptname.sh
Aukščiau pateikta komanda tiesiog paleis scenarijų, neperduodama parametrų.
Tuo tarpu toliau pateikta komanda perduos argumentus scenarijui.
bash scriptname.sh parameter1 parameter2 parameter3 nth-parameter
Vykdomas bash scenarijus su perdavimo parametrais
Aukščiau esančioje ekrano kopijoje rodomi scenarijui perduoti parametrai, kaip tai padarysime, ką paaiškinsime kitame skyriuje. Tačiau šiuo metu matome, kad parametrus perdavėme iš scenarijaus ribų, naudodami bash aplinkos kintamuosius. Jūs netgi galite naudoti eilutes ir kitus duomenų tipus, tačiau saugokitės tarpų. Tarpas tarp kintamojo taps atskiru parametru. Taigi, ypač stygų atveju, būkite atsargūs ir griežtai sudėkite jas kabutėmis.
Komandinės eilutės argumentų aptikimas
Dabar pamatysime, kaip pasiekiame tuos parametrus scenarijaus viduje. Naudosime perduodamų parametrų skaičių tokia tvarka, t. y. pirmiesiems perduodamiems parametrams analizuosime (pasieksime) parametrą naudodami $1 kaip kintamąjį. Pirmasis parametras saugomas $1 kintamajame. Be to, šį kintamąjį galite priskirti bet kuriam kitam vartotojo nustatytam kintamajam, kuriam patinka. Jei perduotas n-asis parametras, galite naudoti $n, kad pasiektumėte tą konkretų parametrą. Čia kintamojo pavadinimas prasideda 1, nes failo pavadinimas / scenarijaus pavadinimas yra 0 parametras. Jei turite daugiau nei 9 parametrus, būtinai naudokite { } aplink skaičių, nes be skliaustų, bash matys tik $10 kaip $1 ir neįtrauks 0, todėl naudokite ${10} ir pan., o ne tiesiog $10.
#!/bin/bash echo '1st parameter = $1 ' echo '2nd Parameter = $2 '
Aukščiau pateiktas scenarijus gali pasiekti parametrus iš komandinės eilutės / apvalkalo, naudodamas padėties parametrus, kurie yra 1, 2, 3 ir pan.
Prieiga prie argumentų iš scenarijaus.
Kaip matote, mes naudojome {} norėdami pasiekti parametrų kintamųjų skaičius nuo 10. Scenarijus gali būti naudojamas kilpoms ir while ciklams, kad būtų galima kartoti parametrus, tačiau mes tai aptarsime kituose skyriuose.
Priskirkite pateiktus argumentus Bash kintamajam
Taip pat galime priskirti jį kitiems pasirinktiniams kintamiesiems, kad scenarijus būtų dinamiškesnis, ir pritaikyti jį pagal poreikius. Nors aukščiau pateiktas scenarijus paleisdamas išspausdins tik du parametrus, tikrai galite pasiekti daugiau parametrų naudodami kintamąjį kaip parametrų eilę skaičiais. Scenarijus gali pasiekti padėties kintamuosius iš komandinės eilutės ir naudoti juos reikiamose scenarijaus vietose.
#!/bin/bash a=$1 b=$2 p=$(($a*$b)) echo 'The product of $a and $b = $p'
Priskirkite pateiktus argumentus Bash kintamajam
Aukščiau pateiktas scenarijus pasiekia padėties parametrus, ty $1 ir $2, perduodamus į scenarijų, ir išsaugo vartotojo apibrėžtus kintamuosius, kad vėliau juos pasiektų ir atitinkamai modifikuotų. Taip pat galime pasiekti daugiau parametrų naudodami iteracinius metodus, kaip matysime būsimuose skyriuose.
Taip pat turime galimybę patikrinti, ar nėra NULL arba tuščių parametrų, perduodamų naudojant -z arba -n vėliavėles. Iš to galime patikrinti, ar parametrai buvo perduoti, ar ne.
#!/bin/bash if [[ -z $1 ]]; then echo 'No parameter passed.' else echo 'Parameter passed = $1' fi
Tikrinama, ar padėties parametrai perduoti, ar ne.
Naudodami šį scenarijų galime nustatyti, ar buvo perduoti padėties parametrai, ar nieko nebuvo perduota. Žymėjimas -z tikrina, ar BASH sistemoje nėra NULL arba neinicijuotų kintamųjų. Vėliava -z grąžina true, jei perduotas kintamasis yra NULL arba nepainicijuotas. Taigi, norėdami aptikti perduoti parametrus, galime naudoti pagrindinius If-else teiginius.
Taip pat galime naudoti vėliavėlę -n, kuri grąžina true, jei nepateikiami jokie parametrai, todėl turime naudoti ! pakeisti būklę.
Tokios kaip:
#!/bin/bash if [[ ! -n $1 ]]; then echo 'No parameter passed.' else echo 'Parameter passed = $1' fi
Šis scenarijus taip pat duos tą pačią išvestį, tačiau mes naudojame vėliavėlę -n vietoj -z.
Kelių argumentų skaitymas naudojant For arba While kilpą
Mes galime naudoti @ kintamąjį, kad pasiektume kiekvieną parametrą, perduodamą scenarijui per komandinę eilutę. Tai specialus kintamasis, kuriame yra BASH kintamųjų masyvas. Šiuo atveju mes naudojame jį vieną, todėl jame yra perduotų padėties parametrų masyvas. Galime jį naudoti norėdami pakartoti parametrus, perduodamus naudojant kilpas arba while ciklus.
#!/bin/bash for i in $@ do echo -e '$i ' done
Norėdami pasiekti parametrus kaip masyvo elementus, naudokite kilpas ir @ kintamąjį.
Naudojome diapazonu pagrįstą ciklu, kad kartotume tol, kol @ masyve bus elementų. Tiesiog kartojame masyvą ir atspausdiname elementą. Galime tiesiog jį priskirti, modifikuoti reikšmes ir atlikti reikiamus parametrų bei argumentų pakeitimus, kad pasiektume norimą scenarijaus rezultatą.
ARBA
Argumentus taip pat galime atspausdinti naudodami while kilpą ir BASH aplinkos kintamuosius.
#!/bin/bash i=$(($#-1)) while [ $i -ge 0 ]; do echo ${BASH_ARGV[$i]} i=$((i-1)) done
Perduotų parametrų kartojimas naudojant ciklą while.
Mes naudojame kintamąjį ' # “, nes jame yra įvestų parametrų skaičius. Mes inicijuojame parametrų skaičių ir pašaliname vieną, nes ketiname naudoti masyvą, kad jį kartotume. Taigi, kaip įprasta, masyvo indeksas prasideda nuo 0. Kadangi šis masyvas inicijuojamas nuo paskutinio perduoto elemento arba parametro, turime sumažinti skaitiklį iki 0, kad kiekvienas parametras būtų spausdinamas jų perdavimo tvarka. Mes tiesiog naudojame masyvą BASH_ARGV, kad pasiektume parametrus ir išspausdintume jo vertę. Be to, kiekvienos iteracijos metu mes sumažiname i-iteratoriaus arba skaitiklio reikšmę vienu aritmetiniais dvigubais skliaustais. Iš to mes tiesiog išspausdiname kiekvieną scenarijui perduotą parametrą naudodami ciklą, kaip parodyta išvesties ekrano kopijoje.
Skaitymas su parametrų pavadinimais
„Getopts“ naudojimas argumentams ir parametrams analizuoti
Galime naudoti komandą getopts, norėdami išanalizuoti argumentus, perduodamus scenarijui komandinėje eilutėje / terminale, naudodami kilpas ir didžiųjų ir mažųjų raidžių keitimo sakinius.
#!/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“ naudojimas argumentams ir parametrams analizuoti
Naudodami getopts, mes galime priskirti padėties argumentus / parametrus iš komandinės eilutės tiesiai į bash kintamuosius. Tai leidžia mums gražiai ir sistemingai valdyti parametrus. Aukščiau pateiktame scenarijuje naudojome du argumentus, kad saugotume bash kintamuosius naudodami getopts sintaksę, o kilpas ir didžiųjų ir mažųjų raidžių teiginius.
Visų argumentų verčių spausdinimas
Argumentus, perduodamus scenarijui, galime atspausdinti paprastu galingu kintamuoju „@“, kuriame saugomi visi perduoti parametrai.
#!/bin/bash echo 'The arguments passed in are : $@'
Visų argumentų verčių spausdinimas
Prieiga prie pateiktų parametrų skaičiaus
Taip pat galime naudoti kintamąjį „#“, kad pasiektume komandų eilutės perduodamų parametrų skaičių. Kintamajame # iš esmės yra parametrų / argumentų, kurie perduodami į scenarijų, skaičius.
#!/bin/bash echo 'The number of arguments passed in are : $#'
Prieiga prie pateiktų parametrų skaičiaus
Toliau buvo aprašytas bash scenarijaus kintamųjų perdavimo ir analizavimo procesas ir specifikacijos. Kintamųjų keitimo ir modifikavimo logika yra vartotojo rankose. Tai buvo tik argumentų perdavimo ir išanalinimo iš komandinės eilutės į scenarijų demonstravimas, kad jie būtų dinamiškesni.