Comprovar si existeix un fitxer o directori des d'un script Bash
Bash s'utilitza per automatitzar ordres executades regularment a Linux. Les ordres destinades a operacions sobre fitxers/directoris s'utilitzen amb força freqüència i, normalment, abans d'executar aquesta ordre, hem de comprovar si el fitxer o directori en particular existeix. Vegem com realitzar aquesta comprovació.
Sintaxi i ús
Fitxers
Per comprovar si existeix un fitxer, utilitzeu la sintaxi següent:
[-f]
L'expressió [-f]
retorna 0, és a dir, èxit si existeix, i si no existeix, retorna un estat diferent de zero. Normalment, això s'utilitza com a condició en el
si
declaració.
si [-f] llavors fi
Per negar el valor retornat, simplement precedi el -f
amb un operador de negació (!
).
si [ ! -f ] llavors fi
En aquest cas, la condició es complirà si el fitxer no existeix, ja que l'estat diferent de zero retornat (fals) es negarà i es considerarà 0 (cert).
Tingueu en compte que si el fitxer a comprovar no existeix al directori actual i existeix en algun altre directori, s'hauria d'esmentar la ruta completa del fitxer en lloc de només el nom del fitxer.
Directoris
Una sintaxi similar a la que s'utilitza per comprovar els fitxers s'utilitza per comprovar els directoris.
[-d]
De manera similar a la declaració per a fitxers, aquesta instrucció retorna 0, és a dir, èxit, si el directori existeix, i un estat diferent de zero, és a dir, es retorna l'estat d'error si no existeix. Això també s'utilitza habitualment en un
si
condició de declaració.
si [ -d ] llavors fi
Per negar l'estat retornat, precediu -d
amb un operador de negació (!
).
si [ ! -d ] llavors fi
La condició es complirà (estat 0) en aquest cas si el directori no existeix, i fallarà (estat diferent de zero) si el directori existeix.
Com s'ha esmentat abans per als fitxers, si el directori que s'ha de comprovar existeix en una altra ubicació i no en el directori actual, s'ha d'introduir tot el camí del directori en comptes de només el nom del directori.
💡 La sintaxi de claudàtors ( [...]
) que s'utilitza aquí és en realitat una ordre de Linux anomenada prova
. Les opcions -f
i -d
són les característiques d'aquesta comanda. Per obtenir més informació, consulteu la pàgina de manual de la prova ( prova d'home
).
Comproveu des d'un script Bash
En els exemples anteriors, hem utilitzat les sintaxis directament al terminal. L'intèrpret d'ordres sempre que troba un bucle o una instrucció condicional (si
en el nostre cas), continua la sol·licitud i permet que l'usuari introdueixi el bloc continuar.
Les mateixes sintaxis es poden utilitzar des d'un script Bash.
El #!/bin/bash
al començament especifica l'intèrpret que s'utilitzarà quan s'executa el fitxer. Tot i que Bash és l'intèrpret d'ordres més utilitzat avui dia, alguns usuaris prefereixen shells com zsh
, que s'hauria d'especificar en lloc de bash a l'inici d'aquest fitxer.
Per donar permisos d'execució per a aquest fitxer, executeu:
chmod +x prova.sh
Finalment, per executar el fitxer, correr:
./prova.sh