La maggior parte delle volte, potremmo trovare una situazione in cui potremmo aver bisogno di eseguire un’azione che controllerà se un file esiste o meno.
In Bash, possiamo usare un “comando di prova” per verificare se esiste un file e determinare il tipo di un file.
Di seguito sono riportate le sintassi del comando di prova e noi possiamo usare uno qualsiasi di questi comandi:
Ci viene richiesto di usare un singolo comando parentesi “[” per rendere il nostro script portabile per tutte le shell POSIX. La versione aggiornata del comando test contiene le doppie parentesi “[[” che è supportata sulla maggior parte dei sistemi moderni che utilizzano Bash, Zsh e Ksh come shell predefinita.
Controlla se il file esiste
Durante il controllo dell’esistenza di un file, gli operatori di file più comunemente usati sono -e e -f. L’opzione “-e” viene utilizzata per verificare se un file esiste indipendentemente dal tipo, mentre l’opzione “-f” viene utilizzata per restituire il valore vero solo se il file è un file normale (non una directory o un dispositivo).
L’opzione più comune per verificare se il file esiste o meno è usare il comando test con “if conditional statement”.
Di seguito sono riportati gli esempi per verificare se “read_file. txt “esiste:
Metodo 1
Metodo 2
Metodo 3
Output
L’output per tutti e tre i metodi sarà il seguente perché abbiamo un file (read_file.txt) presente nella directory:
read_file.txt exist
Se vogliamo eseguire un’azione che fornirà un risultato in base all’esistenza o meno del file, possiamo usare il costrutto if / then nel modo seguente:
Esempio
Risultato
read_file.txt exist
Possiamo anche usare il comando test senza l’istruzione if. Possiamo utilizzare uno dei seguenti metodi:
Metodo 1
Metodo 2
Metodo 3
Output
L’output per tutti e tre i metodi sarà il seguente perché abbiamo un file (read_file.txt) presente nella directory:
read_file.txt exist
Esempio
A differenza di & &, l’istruzione dopo || L’operatore viene eseguito solo se lo stato di uscita del comando di test è “false”.
Esempio
Risultato
read_file.txt exist
Questi sono i metodi comunemente usati in Bash per verificare se il file esiste o meno.
Controlla se la directory esiste
L’operatore “-d” ci consente di verificare se un file è una directory o meno.
Di seguito sono riportati i metodi per verificare se la directory “Javatpoint” esiste:
Metodo 1
Metodo 2
Nota: possiamo anche usare le doppie parentesi “[[” invece di una singola parentesi “[” .
Output
L’output per entrambi i metodi precedenti sarà il seguente poiché abbiamo una directory (denominata Javatpoint) presente nella posizione specificata:
Javatpoint is a directory
Verifica se il file IF non esiste
L’espressione di prova può essere negata utilizzando il punto esclamativo (operatore! -logico NOT). Guarda il seguente esempio:
Esempio
Lo script sopra può anche essere scritto come di seguito:
Output
missing_read_file.txt unavailable
Operatori di test di file
I comandi di test includono i seguenti operatori di file che ci consentono di test per particolari tipi di file:
-b FileReturns | “True” se il FILE esiste come un blocco speciale file. |
-c FileReturns | “True” se il FILE esiste come file di caratteri speciali. |
-d FileReturns | “True” se il FILE esiste come directory. |
-e FileReturns | “True “se il FILE esiste come file, indipendentemente dal tipo (nodo, directory, socket, ecc.). |
-f FileReturns | ” True ” se il FILE esiste come un file normale (non una directory o un dispositivo). |
-G FileReturns | “True” se il FILE esiste e contiene il lo stesso gruppo dell’utente che esegue la comunicazione e. |
-h FileReturns | “True” se il FILE esiste come collegamento simbolico. |
-g FileReturns | “True” se il FILE esiste e contiene il flag set-group-id (sgid) impostato. |
-k FileReturns | “True” se il FILE esiste e contiene un flag di bit appiccicoso impostato. |
-L FileReturns | “True” se il FILE esiste come collegamento simbolico. |
-O FileReturns | “True” se il FILE esiste ed è di proprietà dell’utente che esegue il comando. |
-p FileReturns | “True” se il FILE esiste come pipe. |
– r FileReturns | “True” se il FILE esiste come file leggibile. |
-S FileReturns | “True” se il FILE esiste come socket. |
-s FileReturns | “True” se il FILE esiste e ha una dimensione diversa da zero. |
-u FileReturns | “True” se il FILE esiste e il flag set-user-id (suid) è impostato. |
-w FileReturns | “True” se il FILE esiste come file scrivibile. |
-x FileReturns | “True” se il FILE esiste come file eseguibile. |