Come verificare se un file o una directory esiste in uno script di shell Bash

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 esiste il particolare file o directory. Vediamo come eseguire questo controllo.

Sintassi e utilizzo

File

Per verificare se esiste un file, usa 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 nel Se dichiarazione.

se [ -f ] allora fi

Per negare il valore restituito, semplicemente precedere il -F con un operatore di negazione (!).

Se [ ! -f ] quindi fi

In questo caso, la condizione soddisferà se il file non esiste, poiché lo stato restituito diverso da zero (falso) verrà 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 viene restituito uno stato di errore diverso da zero, se non esiste. Questo è anche comunemente usato in an Se condizione di dichiarazione.

se [ -d] allora fi

Per negare lo stato restituito, precedere il -D con un operatore di negazione (!).

Se [ ! -d ] quindi 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 ( [...] ) usato 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 ( prova uomo ).

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 (Se nel nostro caso), continua il prompt e consente all'utente di entrare nel continuare il blocco.

Le stesse sintassi possono essere utilizzate dall'interno di uno script Bash.

Il #!/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 dovrebbe essere specificato 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, correre:

./test.sh