Se stai lavorando su uno script Bash che interagisce con file e directory, potresti incontrare una situazione in cui devi assicurarti che il file o la directory esistano. Questo aiuta a evitare possibili errori per l'esecuzione di determinate azioni su un file che non esiste.
In questo tutorial, ti mostrerò un paio di modi per verificare se il file o la directory esiste o meno nello script bash. Iniziamo prima con il file.
Verifica se il file esiste nello script bash

L'idea qui è di usare l'operatore -f che restituisce true solo quando è un file normale (non una directory).
Diciamo che vuoi controllare se il file /home/user/my_file esiste o meno. Ecco come puoi controllare tra parentesi quadre
#!/bin/bash
if [ -f /home/user/my_file ]
then
echo "My file exists"
fi
Ma non otterrai sempre il nome del file in anticipo, vero? Puoi averlo in una variabile e, in tal caso, puoi usarlo in questo modo.
#!/bin/bash
FILE=/home/user/my_file
if [ -f "$FILE" ]
then
echo "My file exists"
else
echo "My file doesn't exist"
fi
Fondamentalmente, ciò che conta è la condizione che usi nel comando if. Sta a te decidere come utilizzare l'istruzione if.
Ad esempio, puoi scriverlo con due parentesi quadre, mantenendo 'allora' nella stessa riga di 'se' con l'aiuto del punto e virgola in questo modo:
#!/bin/bash
FILE=/home/user/my_file
if [ -f "$FILE" ]; then
echo "My file exists"
else
echo "My file doesn't exist"
fi
oppure metti insieme l'intera dichiarazione in questo modo:
[ -f /home/user/my_file ] && echo "My file exists" || echo "My file doesn't exist"
Controlla che il file esista in bash con test
Puoi anche usare test in bash per vedere se il file esiste o meno. È praticamente la stessa cosa solo che non usi le parentesi quadre nell'istruzione if:
#!/bin/bash
FILE=/home/user/my_file
if test -f "$FILE"
then
echo "My file exists"
else
echo "My file doesn't exist"
fi
Puoi anche utilizzare il codice sopra in una riga singola in questo modo:
test -f /home/user/my_file && echo "My file exists" || echo "My file doesn't exist"
Verifica se il file non esiste nello script bash
E se fosse il contrario e volessi controllare se il file non esiste in bash? Puoi usare più o meno lo stesso codice di cui sopra usando l'operatore di negazione:
#!/bin/bash
FILE=/home/user/my_file
if [ ! -f "$FILE" ]
then
echo "My file doesn't exist"
fi
Ora che sai come gestire i file, passiamo alle directory.
Verifica se la directory esiste nello script bash
Il codice per controllare la directory è lo stesso che hai visto nella sezione precedente. L'unica differenza è che utilizzerai -d invece di -f. -d restituisce true solo per le directory.
#!/bin/bash
if [ -d /home/user/my_dir ]
then
echo "My directory exists"
fi
Puoi anche usare test qui:
#!/bin/bash
DIR=/home/user/my_dir
if test -d "$DIR"
then
echo "My directory exists"
else
echo "My directory doesn't exist"
fi
Verifica se la directory non esiste in bash
Puoi usare di nuovo la negazione per verificare se la directory non esiste:
#!/bin/bash
DIR=/home/user/my_dir
if [ ! -d "$DIR" ]
then
echo "My directory doesn't exist"
fi
Questo è tutto. Questo è tutto ciò che devi fare per verificare se esiste una directory di file nella shell bash o meno.
Spero che tu possa trovare utile questo consiglio bash. Se hai domande o suggerimenti, non esitare a lasciare un commento qui sotto.