Bash controlla se il file esiste

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.

Write a Comment

Il tuo indirizzo email non sarà pubblicato. I campi obbligatori sono contrassegnati *