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:
-
-bFILE– Vero se il FILE esiste ed è un file di blocco speciale. -
-cFILE– Vero se il FILE esiste ed è un file di caratteri speciali. -
-dFILE– Vero se il FILE esiste ed è una directory. -
-eFILE– Vero se il FILE esiste ed è un file, indipendentemente dal tipo (nodo, directory, socket, ecc.). -
-fFILE– Vero se il FILE esiste ed è un file normale (non una directory o un dispositivo). -
-GFILE– Vero se il FILE esiste e ha lo stesso gruppo dellutente che esegue il comando. -
-hFILE– Vero se il FILE esiste ed è un collegamento simbolico. -
-gFILE– Vero se il FILE esiste e ha set-group-id (sgid) impostato. -
-kFILE– Vero se il FILE esiste e ha impostato un flag di sticky bit. -
-L– Vero se il FILE esiste ed è un collegamento simbolico. -
-OFILE– Vero se il FILE esiste ed è di proprietà dellutente che esegue il comando. -
-pFILE– Vero se il FILE esiste ed è una pipe. -
-rFILE– Vero se il FILE esiste ed è leggibile. -
-SFILE– Vero se il FILE esiste ed è un socket. -
-sFILE– Vero se il FILE esiste e ha dimensioni diverse da zero. -
-uFILE– True se il FILE esiste e set-user-id (suid) è impostato. -
-wFILE– Vero se il FILE esiste ed è scrivibile. -
-xFILE– 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.