Cum să utilizați instrucțiunile Bash If (cu 4 exemple)
Publicat: 2023-05-08if
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.
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 scriereafi
. - 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
Să rulăm scriptul nostru.
./dacă-vârsta.sh
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
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
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.
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
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
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