If-Koubou

Ghidul începătorului pentru Shell Scripting 4: Condiții și declarații "If-Then"

Ghidul începătorului pentru Shell Scripting 4: Condiții și declarații "If-Then" (Cum să)

Am acoperit destul de multe dintre elementele de bază din ghidul nostru de 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 lucrurile mai amuzante, cum ar fi condițiile și declarațiile "dacă-atunci".

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 laptop-ul meu să se poată conecta la internet, există mai multe condiții care trebuie îndeplinite, cum ar fi un ISP, modemul și / sau ruterul aflat în staționare, laptopul meu fiind pornit etc. Este destul de simplu și dacă este cazul din aceste cerințe nu sunt îndeplinite, rezultatul - laptopul meu conectat 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ă nu se potrivește cu alt șir sau chiar dacă există. În mod similar, putem testa argumentele numerice pentru a vedea dacă unul este mare decât, mai mic 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ȚIE
atunci
command1
comanda2

commandn
Fi

Dacă declarații

Să facem un scenariu de testare rapid, nu?

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
  • -Let: mai puțin de
  • - mai mic sau egal cu
  • -gt: mai mare decât
  • -ge: mai mare sau egal cu

Testarea șirurilor

Acum, dacă modificăm prima linie a scriptului nostru,

dacă testul $ 1 = 2 $

atunci condiția va testa dacă cele două sunt egale. Există o captură aici, deși! Utilizarea unui semnal egal (=) compară două șiruri, ș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 modifier "nu". 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:

  • șir: folosind doar un argument prin ea însăși testează dacă șirul nu este gol (null) sau nu este definit într-un fel
  • -n string: acesta va testa dacă șirul nu este necompletat și este definit
  • -z string: acesta 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ȚIE
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. Ele 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 arăta 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 compară 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ă pentru a fi verificată:

  1. Bazele Shell Scripting
  2. Utilizând pentru buclă
  3. Mai multe comenzi de bază
  4. Care sunt diferențele dintre cochilii Linux?
  5. 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-alt-declarații, și "pentru" bucle, împărtășiți-ne cu noi în comentariile!