Cum să utilizați instrucțiunile Bash If (cu 4 exemple)

Publicat: 2023-05-08
Laptop Linux care arată o fereastră de terminal cu un model glob în fundal și un filigran binar
fatmawati achmad zaenuri/Shutterstock
Utilizați instrucțiunea Linux Bash if pentru a construi expresii condiționate cu o structură if then fi . Adăugați cuvinte cheie elif pentru expresii condiționate suplimentare sau cuvântul cheie else pentru a defini o secțiune de cod catch-all care este executată dacă nu a fost executată nicio clauză condițională anterioară.

Toate scripturile Bash non-triviale trebuie să ia decizii. Declarația Bash if permite scriptului dumneavoastră Linux să pună întrebări și, în funcție de răspuns, să ruleze diferite secțiuni de cod. Iată cum funcționează.

Ce este execuția condiționată?

În toate, cu excepția celor mai banale scripturi Bash, este de obicei nevoie ca fluxul de execuție să urmeze o cale diferită prin script, în funcție de rezultatul unei decizii. Aceasta se numește execuție condiționată.

O modalitate de a decide ce ramură de execuție să ia este utilizarea unei instrucțiuni if . S-ar putea să auziți if declarațiile apelează declarații if then , sau declarații if then else . Sunt nume diferite pentru același lucru.

9 Exemple de bucle for în scripturile Linux Bash
LEGATE 9 Exemple de bucle for în scripturile Bash Linux

Declarația if spune că dacă ceva este adevărat, atunci faceți acest lucru . Dar dacă ceva este fals, fă- o în schimb. „Ceva” poate fi multe lucruri, cum ar fi valoarea unei variabile, prezența unui fișier sau dacă două șiruri se potrivesc.

Execuția condiționată este vitală pentru orice script semnificativ. Fără el, ești foarte limitat în ceea ce poți face să faci scriptul tău. Dacă nu poate lua decizii semnificative, nu vei putea să iei probleme din lumea reală și să produci soluții viabile.

Instrucțiunea if este probabil mijlocul cel mai des folosit pentru a obține execuția condiționată. Iată cum să îl utilizați în scriptingul Bash.

LEGATE: Cum să verificați dacă un fișier există în scripturile Linux Bash

Un exemplu simplu de declarație If

Aceasta este forma canonică a celei mai simple declarații if :

 dacă [aceasta-condiție-este-adevărată]
apoi
  executa-aceste-afirmatii
fi

Dacă condiția din text devine adevărată, liniile de script din clauza then sunt executate. Dacă căutați prin scripturi scrise de alții, este posibil să vedeți declarația if scrisă astfel:

 dacă [aceasta-condiție-este-adevărată]; apoi
  executa-aceste-afirmatii
fi

Câteva puncte de reținut:

  • Declarația if se încheie prin scrierea fi .
  • Trebuie să existe un spațiu după prima paranteză ” [ ” și înainte de a doua paranteză ” ] ” a testului condiționat.
  • Dacă veți pune cuvântul cheie then pe aceeași linie cu testul condiționat, asigurați-vă că utilizați punct și virgulă ” ; ” după test.

Putem adăuga o clauză else opțională pentru a avea un cod executat dacă testul condiției se dovedește a fi fals. Clauza else nu are nevoie de un cuvânt cheie then .

 dacă [aceasta-condiție-este-adevărată]
apoi
  executa-aceste-afirmatii
altfel
  executa-aceste-instrucţiuni-în loc
fi

Acest script arată un exemplu simplu de instrucțiune if care utilizează o clauză else . Testul condiționat verifică dacă vârsta clientului este mai mare sau egală cu 21 de ani. Dacă este, clientul poate intra în incintă, iar clauza then este executată. Dacă nu sunt suficient de bătrâni, clauza else este executată și nu au voie să intre.

 #!/bin/bash

customer_age=25

dacă [ $customer_age -ge 21 ]
apoi
  echo "Intră."
altfel
  echo „Nu poți intra”.
fi

Copiați scriptul de sus într-un editor, salvați-l ca fișier numit „if-age.sh” și utilizați comanda chmod pentru a-l face executabil. Va trebui să faceți asta cu fiecare dintre scripturile pe care le discutăm.

 chmod +x if-age.sh 

Folosind chmod pentru a face un script executabil

Să rulăm scriptul nostru.

 ./dacă-vârsta.sh 

Rularea scriptului if-age.sh cu variabila vârstă setată la 25

Acum vom edita fișierul și vom folosi o vârstă mai mică de 21 de ani.

 customer_age=18

Faceți acea modificare scriptului și salvați modificările. Dacă o rulăm acum, condiția returnează false, iar clauza else este executată.

 ./dacă-vârsta.sh 

Rularea scriptului if-age.sh cu variabila vârstă setată la 18

Clauza elif

Clauza elif adaugă teste condiționale suplimentare. Puteți avea câte clauze elif doriți. Sunt evaluate pe rând până când una dintre ele se dovedește a fi adevărată. Dacă niciunul dintre testele condiționale elif nu se dovedește a fi adevărat, clauza else , dacă este prezentă, este executată.

Acest script cere un număr, apoi vă spune dacă este par sau impar. Zero este un număr par, așa că nu trebuie să testăm nimic.

Toate celelalte numere sunt testate prin găsirea modulo al unei împărțiri cu doi. În cazul nostru, modulo este partea fracțională a rezultatului unei împărțiri cu doi. Dacă nu există o parte fracțională, numărul este divizibil cu doi, exact. Prin urmare, este un număr par.

 #!/bin/bash

echo -n "Introduceți un număr: "

citeste numarul

dacă [ $număr -eq 0 ]
apoi
  echo "Ați introdus zero. Zero este un număr par."
elif [ $(($număr % 2)) -eq 0 ]
apoi
  echo "Ați introdus $number. Este un număr par."
altfel
  echo "Ați introdus $number. Este un număr impar."
fi

Pentru a rula acest script, copiați-l într-un editor și salvați-l ca „if-even.sh”, apoi utilizați chmod pentru a-l face executabil.

Să rulăm scriptul de câteva ori și să-i verificăm rezultatul.

 ./dacă-chiar.sh 

Rularea scriptului if-even.sh cu diverse intrări

Toate acestea funcționează bine.

Diferite forme de testare condiționată

Parantezele ” [] ” pe care le-am folosit pentru testele noastre condiționate sunt un mod prescurtat de a apela programul test . Din acest motiv, toate comparațiile și testele pe care le acceptă test sunt disponibile pentru declarația ta if .

Acestea sunt doar câteva dintre ele:

  • ! expresie : Adevărat dacă expresia este falsă.
  • -n șir : Adevărat dacă lungimea șirului este mai mare decât zero.
  • -z șir : adevărat dacă lungimea șirului este zero. Adică este un șir gol.
  • șir1 = șir2 : adevărat dacă șirul1 este același cu șirul2.
  • șir1 != șir2 : adevărat dacă șirul1 nu este același cu șirul2.
  • integer1 -eq integer2 : adevărat dacă întregul1 este egal numeric cu întregul2
  • integer1 -qt integer2 : Adevărat dacă întregul1 este numeric mai mare decât întregul2
  • integer1 -lt integer2 : Adevărat dacă întregul1 este numeric mai mic decât întregul2
  • -d director : Adevărat dacă directorul există.
  • -e fișier : adevărat dacă fișierul există.
  • -s fișier : adevărat dacă fișierul există cu o dimensiune mai mare de zero.
  • -r fișier : adevărat dacă fișierul există și permisiunea de citire este setată.
  • -w fișier : adevărat dacă fișierul există și permisiunea de scriere este setată.
  • -x fișier : adevărat dacă fișierul există și permisiunea de execuție este setată.

În tabel, „fișier” și „director” pot include căi de director, fie relative sau absolute.

Semnul egal „ = ” și testul de egalitate -eq nu sunt același. Semnul egal realizează o comparație de text caracter cu caracter . Testul de egalitate realizează o comparație numerică .

Putem vedea acest lucru utilizând programul test pe linia de comandă.

 test "this string" = "acest șir"
 test "this string" = "acest șir"
 testul 1 = 001
 testul 1 -echivalentul 001

În fiecare caz, folosim comanda echo pentru a tipări codul de retur al ultimei comenzi. Zero înseamnă adevărat, unul înseamnă fals.

Utilizarea programului de testare pe linia de comandă pentru a testa diferite comparații

Folosind semnul egal ” = ” ne dă un răspuns fals comparând 1 cu 001. Este corect, deoarece sunt două șiruri diferite de caractere. Din punct de vedere numeric, acestea au aceeași valoare - una - așa că operatorul -eq returnează un răspuns adevărat.

Dacă doriți să utilizați potrivirea wildcard în testul dumneavoastră condiționat, utilizați sintaxa parantezei duble „ [[ ]] ”.

 #!/bin/bash

dacă [[ $USER == *ve ]]
apoi
  echo „Salut $USER”
altfel
  echo „$USER nu se termină cu „ve””
fi

Acest script verifică numele contului utilizatorului curent. Dacă se termină cu „ ve ”, se tipărește numele de utilizator. Dacă nu se termină în „ ve ”, scriptul vă spune așa și se termină.

 ./dacă-sălbatic.sh 

Rularea scriptului if-wild.sh care afișează căutarea cu wildcard în testul condiționat al instrucțiunii if

RELATED: Testarea condiționată în Bash: if, then, else, elif

Instrucțiuni If imbricate

Puteți pune o declarație if într-o altă declarație if .

Acest lucru este perfect acceptabil, dar imbricarea if declarațiile face ca codul să fie mai puțin ușor de citit și mai dificil de întreținut. Dacă vă simțiți înghesuiți mai mult de două sau trei niveluri de instrucțiuni if , probabil că trebuie să reorganizați logica scriptului.

Iată un scenariu care obține ziua ca număr, de la unu la șapte. Unul este luni, șapte este duminică.

Ne spune programul de deschidere al unui magazin. Dacă este zi lucrătoare sau sâmbătă, raportează că magazinul este deschis. Dacă este duminică, anunță că magazinul este închis.

Dacă magazinul este deschis, declarația if imbricată face un al doilea test. Dacă ziua este miercuri, ne spune că este deschis doar dimineața.

 #!/bin/bash

# obține ziua ca număr 1..7
zi=$(data +"%u")

dacă [ $day -le 6 ]
apoi
  ## magazinul este deschis
  dacă [ $day -eq 3 ]
  apoi
    # Miercuri este jumătate de zi
    echo „Miercurea deschidem doar dimineața”.
  altfel
    # zile regulate ale săptămânii și sâmbătă
   echo „Suntem deschisi toată ziua”.
  fi
altfel
  # nu este deschis duminica
  echo „E duminică, suntem închise”.
fi

Copiați acest script într-un editor, salvați-l ca fișier numit „if-shop.sh” și faceți-l executabil folosind comanda chmod .

Am rulat scriptul o dată, apoi am schimbat ceasul computerului pentru a fi miercuri și am rulat din nou scriptul. Apoi am schimbat ziua într-o duminică și am mai alergat-o.

 ./dacă-magazin.sh
 ./dacă-magazin.sh
 ./dacă-magazin.sh 

Rularea scriptului if-shop.sh cu ceasul computerului setat la o zi a săptămânii, apoi o miercuri, apoi o duminică

LEGATE: Cum să utilizați testele condiționate cu paranteze duble în Linux

Cazul Pentru dacă

Execuția condiționată este ceea ce aduce putere programării și scripturilor, iar instrucțiunea umilă if ar putea fi cel mai frecvent utilizat mod de a schimba calea de execuție în cod. Dar asta nu înseamnă că este întotdeauna răspunsul.

A scrie un cod bun înseamnă a ști ce opțiuni aveți și care sunt cele mai bune de utilizat pentru a rezolva o anumită cerință. Declarația if este grozavă, dar nu lăsați-o să fie singurul instrument din geantă. În special, consultați declarația case care poate fi o soluție în unele scenarii.

LEGATE: Cum să utilizați instrucțiunile de caz în scripturile Bash