Ghidul începătorului pentru Shell Scripting 4 Condiții și dacă-apoi Declarații
Am acoperit destul de multe dintre elementele de bază ale ghidului nostru de pe scripting shell, care ar trebui să vă simțiți confortabil experimentând. În tranșele din această săptămână, vom aborda unele dintre cele mai distractive lucruri, cum ar fi condițiile și "dacă-apoi" declarații.
Care sunt condițiile?
În limbajul de zi cu zi, spunem că condițiile sunt cerințe care trebuie îndeplinite pentru ca ceva să se întâmple. Pentru ca laptopul meu să se poată conecta la internet, există mai multe condiții care trebuie îndeplinite, cum ar fi un ISP, modemul și / sau ruterul fiind pornit, laptopul meu fiind pornit etc. Este destul de simplu și dacă unul din aceste cerințe nu sunt îndeplinite, rezultatul - laptopul meu conectându-se la internet - nu se întâmplă.
Condițiile în domeniul calculului funcționează în mod similar. Putem testa dacă un șir se potrivește unui alt șir, indiferent dacă acesta nu se potrivește unui alt șir, sau chiar dacă acesta există deloc. În mod similar, putem testa argumente numerice pentru a vedea dacă unul este mare decât, mai puțin decât sau egal cu altul. Pentru a obține ceva ce se întâmplă după ce condițiile de testare sunt îndeplinite, vom folosi declarațiile "if-then". Formatul lor este destul de simplu.
dacă CONDIȚIA
atunci
command1
comanda2
...
commandn
Fi
Dacă declarații
Să vedem un scenariu de testare rapid, nu-i așa??
dacă încercați $ 1 -gt $ 2
atunci
ecou "$ 1 este mai mare de $ 2"
Fi
Veți observa că numai atunci când această condiție este adevărată, scriptul execută următoarea comandă. În caz contrar, instrucțiunea "if" va ieși. Dacă există comenzi după instrucțiunea "if", atunci ele vor fi executate în mod normal. Am adăugat următoarea linie la sfârșitul scriptului de mai sus pentru a ilustra acest lucru:
echo "Aceasta vine după instrucțiunea if"
Iată câțiva alți operatori numerici pe care doriți să le încercați:
- -eq: egal cu
- -ne: nu egal cu
- -lt: mai puțin de
- -le: mai mică sau egală cu
- -gt: mai mare decât
- -ge: mai mare sau egal cu
Testarea șirurilor
Acum, dacă vom modifica prima linie a scriptului nostru pentru a fi aceasta:
dacă testul 1 $ = 2 $
atunci condiția va testa dacă cele două sunt egale. Există o captură aici, deși! Utilizarea unui semn egal (=) compară două șiruri de caractere, și nu numere. Dacă doriți să comparați cifrele, va trebui să utilizați operatorul "-eq" similar cu modul în care am folosit "-gt" de mai sus.
Acum, să facem o altă modificare:
dacă încercați $ 1! = $ 2
Includerea punctului de exclamare (!) Acționează ca un "nu" modificator. Aceasta înseamnă că rulează numai următoarea comandă atunci când cele două șiruri nu se potrivesc.
Iată o listă a mai multor teste bazate pe șir pe care le puteți utiliza:
- string: folosind doar un argument de la sine testează dacă șirul nu este gol (null) sau nu este definit într-un fel
- -n string: aceasta va testa dacă șirul nu este necompletat și este definit
- -z șir: aceasta va testa dacă șirul este gol și este definit astfel
Ce altceva despre Dacă?
Recunosc, titlul secțiunii a fost cu siguranță un rău. Bine, știm cum să executăm o comandă dacă un test este adevărat, dar ce se întâmplă dacă vrem să executăm o comandă diferită dacă este falsă? Putem pune cu ușurință cele două împreună prin adăugarea unei secțiuni la declarațiile noastre "dacă-apoi" - un "altceva"!
dacă CONDIȚIA
atunci
command1
comanda2
...
commandn
altfel
command1
comanda2
...
commandn
Fi
Să formăm un scenariu simplu.
E totul cu indentarea corectă. Dacă vă uitați atent, veți observa că am folosit paranteze pătrate ([și]) în loc de comanda de test. Acestea sunt echivalente din punct de vedere funcțional pentru scopurile noastre și sunteți mult mai probabil să vedeți parantezele pătrate din diverse motive, deci le vom folosi de acum încolo.
Iată ce va arata ieșirea:
Este atât de ușor!
Ce fac acum?
Acum că știți cum să utilizați declarațiile "if-then-else", puteți rula scripturi care pot efectua teste. De exemplu, puteți rula un script care va calcula un hash de md5 al unui fișier și apoi îl va compara cu cel pe care l-ați descărcat într-un fișier pentru a vedea dacă se potrivesc.
Pentru unele puncte bonus, puteți crea un script care are o "for" buclă, dar utilizează condițiile de testare în loc să citească linii dintr-un fișier listă ...
Obținem câteva dintre cele mai interesante părți din Ghidul nostru pentru începători în Shell Scripting. Dacă ați pierdut lecțiile anterioare, iată o listă rapidă de verificat:
- Bazele Shell Scripting
- Utilizând pentru Loops
- Mai multe comenzi de bază
- Care sunt diferențele dintre cochilii Linux?
- Cum se utilizează Expresiile regulate de bază
Dacă ați realizat sau ați utilizat script-uri care utilizează condițiile de testare, dacă-apoi-altele și buclele "pentru" împărtășiți-ne în comentarii!