Durante la creazione di uno script bash, potresti incontrare una situazione in cui devi scoprire se un file esiste o meno per eseguire alcune azioni con esso. Puoi utilizzare il comando test per verificare se il file esiste e di che tipo è.
In questo tutorial, ti mostreremo come verificare se il file esiste nei sistemi operativi basati su Linux.
Sintassi di base del comando di prova
La sintassi di base del comando di prova per verificare se il file esiste come mostrato di seguito:
test -e file
Oppure
test -f file
Dove:
- -e
Questa opzione controllerà se esiste un file indipendentemente dal tipo. - -f
Questa opzione controlla se un file esiste solo se il FILE è un file normale.
Dovresti vedere la pagina man del comando test come mostrato di seguito:
man test
Dovresti vedere la seguente schermata :
Verifica se il file esiste utilizzando la riga di comando
In questa sezione ti mostreremo come verificare se il file esiste utilizzando la riga di comando:
Eseguire il seguente comando per verificare se esiste un file chiamato / etc / fstab rue):
test -f /etc/fstab
Successivamente, esegui il seguente comando per impostare il codice di uscita su 0 o 1, ogni volta che il test ha avuto successo non.
echo $?
Risultato:
0
L’output è 0 che significa che il file / etc / fstab esiste.
Puoi anche utilizza il seguente comando per verificare se il file esiste:
echo $0
Risultato:
0
Successivamente, esegui il seguente comando per verificare se il file / etc / fabab esiste ( Falso).
test -f /etc/fabab
echo $?
Risultato:
1
L’output è 1 che significa che il file / etc / fabab non esiste.
Tu può anche verificare se un file chiamato /etc/rc.local esiste o non utilizza l’esecuzione condizionale bash come mostrato di seguito:
test -f /etc/rc.local && echo "Exists" || echo "Not Exists"
Oppure
&& echo "Exists" || echo "Not Exists"
Se il file denominato /etc/rc.local esiste, dovresti vedere il seguente output:
Exists
Puoi anche controllare se esistono o meno più file utilizzando un singolo comando:
&& echo "both files exist"
Oppure
test -f /etc/passwd -a -f /etc/crontab && echo "both files exist"
Dovresti vedere il seguente output:
both files exist
Verifica se il file esiste in Bash
In questa sezione, creeremo uno script bash e controlleremo se un file esiste o meno, stampando un messaggio.
Creiamo un file chiamato test.sh e controlliamo se un file /etc/rc.local esiste o no:
nano test.sh
Aggiungi le seguenti righe:
#!/bin/bash
FILE=/etc/rc.local
if ; then
echo "The file "$FILE" exists."
else
echo "The file "$FILE" is not exists."
fi
Salva e chiudi il file, quindi esegui lo script con il seguente comando:
bash test.sh
Dovresti vedere il seguente output:
The file "/etc/rc.local" exists.
Ora, creiamo un file test.sh e testiamo se il file / etc / rc.localad esiste di not:
nano test.sh
Aggiungi le seguenti righe:
#!/bin/bash
FILE=/etc/rc.localad
if ; then
echo "The file "$FILE" exists."
else
echo "The file "$FILE" is not exists."
fi
Salva e chiudi il file, quindi esegui lo script con il seguente comando:
bash test.sh
Dovresti vedere il seguente output:
The file "/etc/rc.localad" is not exists.
Puoi anche scoprire se un file esiste o meno ed eseguire alcune azioni su di esso nello script bash.
Ad esempio, trova un file chiamato / etc / hosts e copialo nella directory / opt se il file esiste.
Per farlo, crea un file chiamato test.sh:
nano test.sh
Aggiungi le seguenti righe:
FILE=/etc/hosts
if ; then
cp $FILE /opt
fi
Salva e chiudi il file, quindi esegui lo script utilizzando il seguente comando:
Ora, prova la directory / opt con il seguente comando:
ls /opt/hosts
Dovresti vedere il file hosts nel seguente output:
/opt/hosts
Puoi anche usare l’espressione! per verificare se il file non esiste.
Ad esempio, esegui il seguente comando per verificare se il file / etc / hosting non esiste:
&& echo "File does not exist"
Oppure
test ! -f /etc/hosting && echo "File does not exist"
Dovresti vedere il seguente output:
File does not exist
Verifica se la directory esiste
Puoi anche scoprire se una directory esiste o meno usando l’opzione -d.
Ad esempio, controlla se la directory / etc / apache2 esiste o meno.
&& echo "Directory is exists"
Oppure
test -d /etc/apache2 && echo "Directory is exists"
Dovresti vedere il seguente output:
Directory is exists
Puoi anche creare uno script bash con espressioni condizionali per verificare se una directory esiste o meno.
Crea un file denominato test.sh come mostrato di seguito:
nano test.sh
Aggiungi le seguenti righe:
Salva e chiudi il file quando hai finito. Quindi, dai il permesso appropriato con il seguente comando:
chmod 755 test.sh
Quindi, verifica se la directory / etc / nginx è disponibile o meno con il seguente comando:
./test.sh /etc/nginx
Dovresti vedere il seguente output:
Directory /etc/nginx/ exists.
Successivamente, verifica se la directory / etc / linux è disponibile o meno con il seguente comando:
./test.sh /etc/linux
Dovresti vedere il seguente output:
Directory /etc/linux does not exists
Operatori di test di file in Bash
I seguenti operatori di test di file ti aiuteranno a verificare se un “file” esiste e ha tipi specifici:
- -b
FILE esiste ed è un blocco speciale - -c
FILE esiste ed è un carattere speciale - -d
FILE esiste ed è un directory - -e
FILE esiste - -f
FILE esiste ed è un file normale - -g
FILE esiste ed è set-group-ID - -G
FILE ex ists ed è di proprietà dell’ID gruppo effettivo - -h
FILE esiste ed è un collegamento simbolico (uguale a -L) - -k
FILE esiste e ha il suo sticky bit è impostato - -L
FILE esiste ed è un collegamento simbolico (uguale a -h) - -O
FILE esiste ed è di proprietà dell’utente effettivo ID - -p
FILE esiste ed è una pipe con nome - -r
FILE esiste e viene concesso il permesso di lettura - -s
FILE esiste e ha una dimensione maggiore di zero - -S
FILE esiste ed è un socket - -u
FILE esiste e il suo bit set-user-ID è impostato - -w
FILE esiste e il permesso di scrittura è concesso - -x
FILE esiste ed è concesso il permesso di esecuzione (o ricerca)