Verificare se esiste un file o una directory da uno script Bash
Bash viene utilizzato per automatizzare i comandi eseguiti regolarmente in Linux. I comandi che sono destinati alle operazioni su file/directory sono usati abbastanza frequentemente e di solito, prima di eseguire un tale comando, dobbiamo verificare se il particolare file o directory esiste. Vediamo come eseguire questo controllo.
Sintassi e utilizzo
File
Per verificare se esiste un file , utilizzare la seguente sintassi:
[ -f ]
L'espressione [ -f ]
restituisce 0, cioè successo se esiste, e se non esiste restituisce uno stato diverso da zero. In genere, questo viene utilizzato come condizione if
nell'istruzione.
if [ -f ]
then
fi
Per negare il valore restituito , è sufficiente anteporre -f
a un operatore di negazione ( !
).
if [ ! -f ]
then
fi
In questo caso, la condizione sarà soddisfatta se il file non esiste , in quanto lo stato restituito diverso da zero (false) sarà negato e considerato come 0 (vero).
Nota che se il file da controllare non esiste nella directory corrente ed esiste in qualche altra directory, il percorso completo del file dovrebbe essere menzionato invece del solo nome del file.
Directory
Una sintassi simile a quella utilizzata per il controllo dei file viene utilizzata per il controllo delle directory.
[ -d ]
Simile all'istruzione per i file, questa istruzione restituisce 0, ovvero successo, se la directory esiste, e uno stato diverso da zero, ovvero viene restituito lo stato di errore se non esiste. Questo è anche comunemente usato in una if
condizione di istruzione.
if [ -d ]
then
fi
Per negare lo stato restituito, precedere il -d
con un operatore di negazione ( !
).
if [ ! -d ]
then
fi
La condizione soddisferà (stato 0) in questo caso se la directory non esiste e fallirà (stato diverso da zero) se la directory esiste.
Come accennato in precedenza per i file, se la directory da controllare esiste in un'altra posizione e non nella directory corrente, è necessario immettere l'intero percorso della directory anziché solo il nome della directory.
💡 La sintassi della parentesi ( [...]
) usata qui è in realtà un comando Linux chiamato test
. Le opzioni -f
e -d
sono le caratteristiche di questo comando. Per ulteriori informazioni, vedere la pagina di manuale di test ( man test
).
Verifica da uno script Bash
Negli esempi precedenti, abbiamo utilizzato le sintassi direttamente sul terminale. La shell ogni volta che incontra un ciclo, o un'istruzione condizionale ( if
nel nostro caso), continua il prompt e consente all'utente di inserire la continuazione del blocco.
Le stesse sintassi possono essere utilizzate dall'interno di uno script Bash.
L' #!/bin/bash
all'inizio specifica l'interprete da utilizzare quando viene eseguito il file. Sebbene Bash sia la shell più comunemente usata al giorno d'oggi, alcuni utenti preferiscono shell come zsh
, che dovrebbero essere specificate al posto di bash all'inizio di questo file.
Per dare i permessi di esecuzione per questo file, esegui:
chmod +x test.sh
Infine, per eseguire il file , esegui:
./test.sh