Molte volte durante la scrittura di script Shell, potresti trovarti in una situazione in cui devi eseguire unazione in base allesistenza o meno di un file .
In Bash, puoi utilizzare il comando test per verificare se esiste un file e determinare il tipo di file.
Il comando test assume una delle seguenti forme di sintassi:
Se desideri che il tuo script sia portabile, dovresti utilizzare il vecchio test ; then echo "$FILE exists."fi
Se vuoi eseguire unazione diversa a seconda che il file esista o meno semplicemente usa il costrutto if / then:
Puoi anche usare il comando test senza listruzione if. Il comando dopo loperatore &&
verrà eseguito solo se lo stato di uscita del comando di prova è vero,
Se lo desideri esegui una serie di comandi dopo loperatore &&
racchiudi semplicemente i comandi tra parentesi graffe separati da ;
o &&
:
opposta a &&
, la dichiarazione dopo Loperatore ||
verrà eseguito solo se lo stato di uscita del comando di prova è false
.
Controlla se la directory esiste #
Gli operatori -d
ti consentono di verificare se un file è un directory o meno.
Ad esempio per verificare se la directory /etc/docker
esiste, dovresti utilizzare:
Puoi anche utilizzare le doppie parentesi graffe ; then echo "$FILE does not exist."fi
Come sopra:
Controlla se esistono più file #
Invece di usare complicati costrutti if / else annidati puoi usare -a
(o &&
con ; then echo "Both files exist."fi
Varianti equivalenti senza utilizzare listruzione IF:
Operatori di test dei file #
Il comando test include i seguenti operatori FILE che consentono di testare particolari tipi di file:
-
-b
FILE
– Vero se il FILE esiste ed è un file di blocco speciale. -
-c
FILE
– Vero se il FILE esiste ed è un file di caratteri speciali. -
-d
FILE
– Vero se il FILE esiste ed è una directory. -
-e
FILE
– Vero se il FILE esiste ed è un file, indipendentemente dal tipo (nodo, directory, socket, ecc.). -
-f
FILE
– Vero se il FILE esiste ed è un file normale (non una directory o un dispositivo). -
-G
FILE
– Vero se il FILE esiste e ha lo stesso gruppo dellutente che esegue il comando. -
-h
FILE
– Vero se il FILE esiste ed è un collegamento simbolico. -
-g
FILE
– Vero se il FILE esiste e ha set-group-id (sgid
) impostato. -
-k
FILE
– Vero se il FILE esiste e ha impostato un flag di sticky bit. -
-L
– Vero se il FILE esiste ed è un collegamento simbolico. -
-O
FILE
– Vero se il FILE esiste ed è di proprietà dellutente che esegue il comando. -
-p
FILE
– Vero se il FILE esiste ed è una pipe. -
-r
FILE
– Vero se il FILE esiste ed è leggibile. -
-S
FILE
– Vero se il FILE esiste ed è un socket. -
-s
FILE
– Vero se il FILE esiste e ha dimensioni diverse da zero. -
-u
FILE
– True se il FILE esiste e set-user-id (suid
) è impostato. -
-w
FILE
– Vero se il FILE esiste ed è scrivibile. -
-x
FILE
– Vero se il FILE esiste ed è exe tagliabile.
Conclusione #
In questa guida, ti abbiamo mostrato come controllare se un file o una directory esiste in Bash.