Exemple de Bash If-Then-Else

Bash If Then Else Example



En aquesta lliçó, veurem com podem utilitzar les sentències If-Then-Else als scripts d'entorn Bash que escrivim. Les sentències If-Then-Else són una eina útil per proporcionar una manera de definir el camí d'acció d'un script quan es compleixen algunes condicions. Vegem quina és la sintaxi de les sentències If-Then-Else:

siALGUNES COMANDES;
llavorsLLAVORS-COMANDES;
en cas contrariCOMANDES MÉS;
ser

A l'ordre anterior que es mostra, si es troba que SOME-COMMANDS és cert o el seu estat de retorn és 0, s'executaran THEN-COMMANDS. Si no és així, s’executen ELS-COMMANDS. A ALGUNES COMANDES, normalment fem alguna comparació de cadenes o comparació de valors en forma de nombres enters. També podem fer moltes operacions que impliquen fitxers. Vegem alguns exemples d'ordres principals que s'utilitzen principalment quan es treballa amb condicions basades en fitxers:







Primària Significat
[-A] Retorna cert quan existeix FILE.
[-B] Retorna cert quan FILE existeix i és un fitxer especial de bloc.
[-C] Retorna cert quan FILE existeix i és un fitxer especial de caràcters.
[-d] Retorna cert quan FILE existeix i és un directori.
[-I] Retorna cert quan existeix FILE.
[-f] Retorna cert quan FILE existeix i és un fitxer normal.
[-g] Retorna cert quan FILE existeix i el seu bit SGID està definit.
[-h] Retorna cert quan FILE existeix i és un enllaç simbòlic.
[-k] Retorna cert quan FILE existeix i el seu bit adhesiu està configurat.
[-p] Retorna cert quan FILE existeix i és un tub anomenat (FIFO).
[-r] Retorna cert quan FILE existeix i es pot llegir.
[-s] Retorna cert quan FILE existeix i té una mida superior a zero.
[-t] Retorna cert quan el descriptor de fitxer FD està obert i fa referència a un terminal.
[-u] Retorna cert quan existeix FILE i el bit SUID (ID d'usuari definit) està definit.
[-in] Retorna cert quan FILE existeix i es pot escriure.
[-X] Retorna cert quan FILE existeix i és executable.
[-O] Retorna cert quan FILE existeix i és propietat de l'identificador d'usuari efectiu.
[-G] Retorna cert quan FILE existeix i és propietat de l'identificador de grup efectiu.
[-EL] Retorna cert quan FILE existeix i és un enllaç simbòlic.
[-N] Retorna cert quan FILE existeix i s'ha modificat des de la seva última lectura.
[-S] Retorna cert quan FILE existeix i és un sòcol.

Els THEN-COMMANDS i ELSE-COMMANDS poden ser qualsevol operació vàlida d'UNIX o qualsevol programa executable. Tingueu en compte que el fitxer llavors i ser les ordres estan separades per punt i coma, ja que es consideren elements completament separats d'un script.



Exemple simple If-Then-Else

Comencem la nostra lliçó amb un exemple molt senzill amb afirmacions If-Then-Else.
Aquí teniu un programa de mostra:



Si Exemple

Si Exemple





Aquí teniu la sortida que veiem quan executem el nostre script:

$. ifelse1.sh
Els valors són els mateixos!
$

Utilitzant arguments de línia de comandes

També podem utilitzar arguments de línia d’ordres als nostres scripts i utilitzar el nombre d’arguments i els propis valors com a condició a la sentència IF que definim. Primer definim un fitxer de text amb el contingut següent:



El meu nom és LinuxHint. M'encanten els servidors, sobretot els d'Ubuntu. Ho són
terminalish!

Ara podem escriure un script que comprovi si una paraula apareix en un fitxer de text o no. Definim ara l'script:

trobo 'Trobant $ 1 a $ 2'
adherència $ 1 $ 2
si [ $? -nascut 0 ]
llavors
trobo 'No s'ha trobat $ 1 al fitxer $ 2.'
en cas contrari
trobo '$ 1 trobat al fitxer $ 2.'
ser
trobo 'Script completat.'

Aquest guió és molt dinàmic. Considera la paraula a buscar i el fitxer a cercar des de la mateixa línia d’ordres. Ara ja estem preparats per executar el nostre script:

. ifelse2.sh amor hello.txt

Veurem una sortida com:

Trobar amordinshola.txt
amor trobatdins dossierhola.txt.
Script completat.

Comprovació del nombre d'arguments de la línia d'ordres

Dins d’una sentència IF, fins i tot podem comprovar quants arguments de la línia d’ordres es van passar a l’ordre per poder actuar sobre el mateix:

comptar=$ #
si [ ! $ recompte -gt 1 ]
llavors
trobo 'No hi ha prou arguments'
en cas contrari
trobo 'Bona feina!'
ser

Executem aquest script ara, veurem la sortida següent:

Arguments de línia d'ordres

Arguments de línia d'ordres

Declaracions If-Then-Elif-Else

També podem tenir diverses sentències IF al mateix bloc per reduir el camí de decisió que pren el nostre programa per executar les ordres que hem definit. Aquí teniu la sintaxi per definir diverses sentències IF als nostres scripts:

siCOMANDES DE PROVA;
llavors
COMANDAMENTS DE RESULTAT;
elif
ALTRES COMANDES;
llavors
ALTRES COMANDES DE RESULTAT;
en cas contrari
ALTRES COMANDES;
ser

Tot i que sembla bastant familiar i fàcil de fer un seguiment. Definim un exemple senzill per establir el funcionament de l'arbre:

comptar=$ #
si [ $ recompte -eq 1 ]
llavors
trobo 'Només s'ha trobat un argument'.
elif [ $ recompte -eq 2 ]
llavors
trobo 'Millor, s'han trobat dos arguments'.
en cas contrari
trobo 'Bona feina, molts arguments trobats!'
ser

Això és el que recuperem amb aquesta ordre:

Si llavors Elif Else exemple

Si llavors Elif Else exemple

Utilització de casaments

Les declaracions IF-ELSE són útils quan teniu una gran llista d'opcions que heu de decidir. Però, en cas que vulgueu realitzar una acció només en alguns casos de concordança exacta amb el resultat, també podem utilitzar instruccions CASE als scripts de Bash. La seva sintaxi té el següent aspecte:

CaixaEXPRESSIÓdinsCAS 1)MANDATS A EXECUTAR;
CAS 2)MANDATS A EXECUTAR;
CAS 2)MANDATS A EXECUTAR;
...)MANDATS A EXECUTAR;
*)MANDATS A EXECUTAR;
esac

L'últim cas amb * actua com a cas predeterminat i s'executarà quan cap dels casos definits anteriorment no coincideixi.

Construïm ràpidament un exemple senzill amb les sentències CASE:

Caixa '$ 1' dins
1)
trobo 'El valor és 1.'
;;
2)
trobo 'El valor és 2'.
;;
3)
trobo 'El valor és 3'.
;;
*)
trobo 'S'ha passat un altre valor.'
esac

Cada sentència CASE finalitza per ;; (marques de doble punt i coma). Això és el que recuperem amb aquesta ordre:

Exemple CASE

Exemple CASE

Conclusió

En aquesta lliçó, hem analitzat com podem utilitzar les instruccions IF-ELSE, IF-THEN-ELIF i CASE en els scripts de Bash que definim per fer accions específiques sobre la base de valors que existeixen als nostres programes o que l’usuari ha aprovat mitjançant posicional paràmetres.