Nella maggior parte dei casi, potremmo trovarci in una situazione in cui potremmo dover eseguire un'azione per verificare se un file esiste o meno.
In Bash, possiamo usare un 'comando test' per verificare se un file esiste e determinare il tipo di file.
Di seguito sono riportate le sintassi del comando test e possiamo utilizzare uno qualsiasi di questi comandi:
test expression [ expression ] [[ expression ]]
Dobbiamo utilizzare un comando tra parentesi singola '[' per rendere il nostro script portabile per tutte le shell POSIX. La versione aggiornata del comando test contiene doppie parentesi '[[' che sono supportate 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 utilizzati 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 è utilizzare il comando test con l'istruzione condizionale 'if'.
Di seguito sono riportati gli esempi per verificare se il file 'read_file.txt' esiste:
Metodo 1
#!/bin/bash File=read_file.txt if test -f '$File'; then echo '$File exist ' fi
Metodo 2
#!/bin/bash File=read_file.txt if [ -f '$File' ]; then echo '$File exist ' fi
Metodo 3
#!/bin/bash File=read_file.txt if [[ -f '$File' ]]; then echo '$File exist ' fi
Produzione
L'output per tutti e tre i metodi sarà il seguente perché abbiamo un file (read_file.txt) presente nella directory:
onclick js
read_file.txt exist
Se vogliamo eseguire un'azione che fornisca un risultato in base all'esistenza o meno del file, possiamo utilizzare il costrutto if/then nel modo seguente:
Esempio
#!/bin/bash File=read_file.txt if [ -f '$File' ]; then echo '$File exist' else echo '$File does not exist' fi
Produzione
read_file.txt exist
Possiamo anche usare il comando test senza l'istruzione if. Possiamo utilizzare uno qualsiasi dei seguenti metodi:
Metodo 1
#!/bin/bash File=read_file.txt test -f read_file.txt && echo '$File exist'
Metodo 2
#!/bin/bash File=read_file.txt [ -f read_file.txt ] && echo '$File exist'
Metodo 3
#!/bin/bash File=read_file.txt [[ -f read_file.txt ]] && echo '$File exist'
Produzione
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 ci sono più comandi da eseguire dopo l'operatore &&, racchiudere i comandi tra parentesi graffe separate da punto e virgola (;) o AND (&&), ad esempio:
Esempio
#!/bin/bash File=read_file.txt [ -f read_file.txt ] && { echo '$File exist'; echo 'Task Completed'; }
A differenza di &&, la frase dopo || L'operatore viene eseguito solo se lo stato di uscita del comando test è 'false'.
Esempio
string.replaceall in Java
#!/bin/bash File=read_file.txt [ -f read_file.txt ] && echo '$File exist' || echo '$File does not exist'
Produzione
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 esiste la directory 'Javatpoint':
Metodo 1
#!/bin/bash File=Javatpoint if [ -d '$File' ]; then echo '$File is a directory' fi
Metodo 2
#!/bin/bash File=Javatpoint [ -d '$File' ] && echo '$File is a directory'
Nota:Possiamo anche usare le parentesi doppie '[[' invece della parentesi singola '['.
Produzione
L'output per entrambi i metodi di cui sopra sarà il seguente poiché abbiamo una directory (denominata Javatpoint) presente nella posizione specificata:
Javatpoint is a directory
Controlla se il file non esiste
L'espressione di test può essere negata utilizzando il punto esclamativo (operatore NOT logico!). Dai un'occhiata al seguente esempio:
Esempio
#!/bin/bash File=missing_read_file.txt if [ ! -f '$File' ]; then echo '$File does not exist' fi
Lo script sopra può anche essere scritto come di seguito:
#!/bin/bash File=missing_read_file.txt [ ! -f '$File' ] && echo '$File unavailable'
Produzione
missing_read_file.txt unavailable
Operatori di test dei file
I comandi di test includono i seguenti operatori di file che ci consentono di testare particolari tipi di file:
-b Restituzioni di file | 'Vero' se il FILE esiste come file speciale di blocco. |
-c Resi del file | 'Vero' se il FILE esiste come file di caratteri speciali. |
-d Restituisce file | 'Vero' se il FILE esiste come directory. |
-e Restituzioni di file | 'Vero' se il FILE esiste come file, indipendentemente dal tipo (nodo, directory, socket, ecc.). |
-f Resi del file | 'Vero' se il FILE esiste come un file normale (non una directory o un dispositivo). |
-G Restituisce file | 'Vero' se il FILE esiste e contiene lo stesso gruppo in cui l'utente sta eseguendo il comando. |
-h Resi del file | 'Vero' se il FILE esiste come collegamento simbolico. |
-g Restituzioni di file | 'Vero' se il FILE esiste e contiene il flag set-group-id (sgid). |
-k Resi del file | 'Vero' se il FILE esiste e contiene un flag di sticky bit impostato. |
-L Resi del file | 'Vero' se il FILE esiste come collegamento simbolico. |
-O Restituzioni di file | 'Vero' se il FILE esiste ed è di proprietà dell'utente che sta eseguendo il comando. |
-p Restituisce file | 'Vero' se il FILE esiste come pipe. |
-r Restituisce il file | 'Vero' se il FILE esiste come file leggibile. |
-S Restituisce il file | 'Vero' se il FILE esiste come socket. |
-s Restituisce il file | 'Vero' se il FILE esiste e ha dimensione diversa da zero. |
-u Restituzioni di file | 'Vero' se il FILE esiste e il flag set-user-id (suid) è impostato. |
-w Restituzioni di file | 'Vero' se il FILE esiste come file scrivibile. |
-x Restituzioni di file | 'Vero' se il FILE esiste come file eseguibile. |