Introducere
Am examinat anterior cum să treacă argumente în linia de comandă pentru un script bash. În acest tutorial, vom arunca o privire asupra modului în care putem folosi aceste argumente în scriptul bash.,
Lectură suplimentară:
cum să treci argumentele din linia de comandă la scriptul Bash
cum să folosiți comanda cd în scripturile Bash
tensiunea de Ieșire de Comandă Într-o Matrice în Bash
Prelucrare Intrare
Să aruncăm o privire la diferite moduri de a procesa argumente pentru un script bash în interiorul script-ul.
2. 1. Parametrii poziționali
argumentele transmise unui script sunt procesate în aceeași ordine în care sunt trimise., Indexarea argumentelor începe de la unul, iar primul argument poate fi accesat în interiorul scriptului folosind $1. În mod similar, al doilea argument poate fi accesat folosind $2 și așa mai departe. Parametrul pozițional se referă la această reprezentare a argumentelor folosind poziția lor.
să luăm un exemplu de următorul script, userReg-positional-parametru.,sh, care imprimă numele de utilizator, vârstă, și numele complet în ordinea asta:
echo "Username: $1";echo "Age: $2";echo "Full Name: $3";
Acum, haideți să rula acest script cu trei parametri de intrare:
sh userReg-positional-parameter.sh john 25 'John Smith'
rezultatul va fi:
Username : johnAge: 25Full Name: John Smith
2.2. Steaguri
folosind steaguri este un mod comun de a trece de intrare la un script. La trecerea de intrare la script-ul, există un steag (de obicei, o singură literă), începând cu o cratimă (-) înainte de fiecare argument.
să aruncăm o privire la userReg-flags.sh script, care are trei argumente: nume de utilizator (-u), vârstă (-a) și nume complet (- f).,
vom modifica scriptul anterior pentru a folosi steaguri în loc să ne bazăm pe parametrii poziționali., La getopts funcția citește steagurile de la intrare, și OPTARG se referă la valorile corespunzătoare:
Să rula acest script cu aceleași date de intrare ca și înainte, doar că de data asta, vom adăuga steaguri la intrare:
sh userReg-flags.sh -f 'John Smith' -a 25 -u john
rezultatul este același ca și mai înainte, deși ne-au schimbat pozițiile de utilizator și numele complet argumente:
Username : johnAge: 25Full Name: John Smith
Aici suntem folosind getopts funcția de a analiza steaguri furnizate ca intrare, și în caz de bloc pentru a atribui valoarea specificată pentru variabila corespunzătoare.
2, 3., Bucla Construct
parametrii poziționali, în timp ce convenabil în multe cazuri, nu pot fi utilizate atunci când dimensiunea de intrare este necunoscut. Utilizarea unei construcții de buclă vine la îndemână în aceste situații.
variabila este matricea tuturor parametrilor de intrare. Folosind această variabilă într-o buclă for, putem itera peste intrare și procesa toate argumentele transmise.
să luăm un exemplu de script users-loop.,sh, care imprimă toate numele de utilizator, care au fost transmise ca date de intrare:
i=1;for user in "" do echo "Username - $i: $user"; i=$((i + 1));done
Acum, haideți să rula script:
sh users-loop.sh john matt bill 'joe wicks' carol
Și ne vom vedea de ieșire:
Username - 1: johnUsername - 2: mattUsername - 3: billUsername - 4: joe wicksUsername - 5: carol
În exemplul de mai sus, suntem iterarea utilizator variabilă pe întreaga gamă de parametri de intrare. Această iterație începe de la primul argument de intrare, john, și se execută până la ultimul argument, carol, chiar dacă dimensiunea de intrare este necunoscut.
2, 4., Shift Operator
Shift operator în bash (syntactic shift n, unde n este numărul de poziții de mutat) schimbă poziția argumentelor liniei de comandă. Valoarea implicită pentru n este una dacă nu este specificată.
operatorul shift determină indexarea intrării să pornească de la poziția deplasată. Cu alte cuvinte, atunci când acest operator este utilizat pe o intrare matrice, parametrul pozițional $1 se modifică la argumentul atins prin schimbarea n poziții la dreapta de la argumentul curent legat la parametrul pozițional $1.,
luați în Considerare un exemplu de script care determină dacă intrarea este par sau impar:
sh parityCheck.sh 13 18 27 35 44 52 61 79 93
Din cele de mai sus discuție pe pozițional parametru, acum știm că $1 se referă la primul argument, care este de 13. Utilizarea operatorului shift cu intrare 1 (shift 1) determină indexarea să pornească de la al doilea argument. Adică, $1 se referă acum la al doilea argument (18). În mod similar, apelarea shift 2 va determina apoi indexarea să înceapă de la al patrulea argument (35).să aruncăm din nou o privire la exemplul de script de utilizatori discutat mai sus., În loc să folosim variabila și să iterăm peste ea, vom folosi acum operatorul shift. A $# venituri variabile de intrare dimensiune:
i=1;j=$#;while do echo "Username - $i: $1"; i=$((i + 1)); shift 1;done
Să rula scriptul cu aceeași intrare ca mai sus:
sh users-shift-operator.sh john matt bill 'joe wicks' carol
rezultatul va fi același ca și mai înainte:
Username - 1: johnUsername - 2: mattUsername - 3: billUsername - 4: joe wicksUsername - 5: carol
În acest exemplu, noi suntem schimbarea de poziție parametru în fiecare iterație câte unul, până când vom ajunge la capătul de intrare. Prin urmare, $1 se referă la următorul element din intrare de fiecare dată.,
concluzie
în acest articol, am analizat modul în care argumentele transmise unui script bash în timpul rulării pot fi procesate în interiorul scriptului în moduri diferite:
- parametrii poziționali pot fi utilizați atunci când dimensiunea de intrare este fixă și ordinea argumentelor din intrare este cunoscută.
- cu steaguri, ordinea argumentelor din intrare nu contează.
- buclă construct vine la îndemână atunci când dimensiunea de intrare este necunoscut.
- operatorul Shift determină indexarea să pornească de la argument la poziția deplasată.,
- variabila returnează matricea parametrilor de intrare, iar $# returnează dimensiunea matricei de intrare.ca întotdeauna, exemplele utilizate în acest articol sunt disponibile pe GitHub.