În timp ce creați un script bash, este posibil să întâlniți o situație în care trebuie să aflați dacă există sau nu un fișier să efectueze o acțiune cu ea. Puteți utiliza comanda test pentru a verifica dacă fișierul există și ce tip este acesta.
În acest tutorial, vă vom arăta cum să verificați dacă fișierul există în sistemele de operare bazate pe Linux.
Sintaxa de bază a comenzii de testare
Sintaxa de bază a comenzii de testare pentru a verifica dacă fișierul există așa cum se arată mai jos:
test -e file
Sau
test -f file
Unde:
- -e
Această opțiune va verifica dacă există un fișier indiferent de tip. - -f
Această opțiune va verifica dacă un fișier există numai dacă FIȘIERUL este un fișier obișnuit.
Ar trebui să vedeți pagina manuală a comenzii de testare așa cum se arată mai jos:
man test
Ar trebui să vedeți următorul ecran :
Testează dacă fișierul există folosind linia de comandă
În această secțiune, vă vom arăta cum se verifică dacă fișierul există folosind linia de comandă:
Rulați următoarea comandă pentru a verifica dacă există un fișier numit / etc / fstab (T rue):
test -f /etc/fstab
Apoi, executați următoarea comandă pentru a seta codul de ieșire la 0 sau 1, ori de câte ori testul a reușit sau nu.
echo $?
Ieșire:
0
Ieșirea este 0, ceea ce înseamnă că fișierul / etc / fstab există.
De asemenea, puteți utilizați următoarea comandă pentru a verifica dacă există fișier:
echo $0
Ieșire:
0
Apoi, executați următoarea comandă pentru a testa dacă fișierul / etc / fabab există ( Fals).
test -f /etc/fabab
echo $?
Ieșire:
1
Ieșirea este 1, ceea ce înseamnă că fișierul / etc / fabab nu există.
Tu poate testa, de asemenea, dacă există un fișier numit /etc/rc.local sau nu utilizează execuția condițională bash așa cum se arată mai jos:
test -f /etc/rc.local && echo "Exists" || echo "Not Exists"
Sau
&& echo "Exists" || echo "Not Exists"
Dacă fișierul numit /etc/rc.local există, ar trebui să vedeți următoarea ieșire:
Exists
De asemenea, puteți verifica dacă există mai multe fișiere sau nu folosind o singură comandă:
&& echo "both files exist"
Sau
test -f /etc/passwd -a -f /etc/crontab && echo "both files exist"
Ar trebui să vedeți următoarea ieșire:
both files exist
Testează dacă fișierul există în Bash
În această secțiune, vom crea un script bash și vom verifica dacă există sau nu un fișier, imprimând un mesaj.
Permiteți, să creăm un fișier numit test.sh și să verificăm dacă un fișier /etc/rc.local există sau nu:
nano test.sh
Adăugați următoarele linii:
#!/bin/bash
FILE=/etc/rc.local
if ; then
echo "The file "$FILE" exists."
else
echo "The file "$FILE" is not exists."
fi
Salvați și închideți fișierul, apoi rulați scriptul cu următoarea comandă:
bash test.sh
Ar trebui să vedeți următoarea ieșire:
The file "/etc/rc.local" exists.
Acum, să creăm un fișier test.sh și să verificăm dacă fișierul / etc / rc.localad există nu:
nano test.sh
Adăugați următoarele linii:
#!/bin/bash
FILE=/etc/rc.localad
if ; then
echo "The file "$FILE" exists."
else
echo "The file "$FILE" is not exists."
fi
Salvați și închideți fișierul, apoi rulați scriptul cu următoarea comandă:
bash test.sh
Ar trebui să vedeți următoarea ieșire:
The file "/etc/rc.localad" is not exists.
De asemenea, puteți găsi dacă există sau nu un fișier și puteți efectua o acțiune asupra acestuia în scriptul bash.
De exemplu, găsiți un fișier numit / etc / hosts și copiați-l în directorul / opt dacă fișierul există.
Pentru aceasta, creați un fișier numit test.sh:
nano test.sh
Adăugați următoarele rânduri:
FILE=/etc/hosts
if ; then
cp $FILE /opt
fi
Salvați și închideți fișierul, apoi rulați scriptul folosind următoarea comandă:
Acum, testați directorul / opt cu următoarea comandă:
ls /opt/hosts
Ar trebui să vedeți fișierul hosts în următoarea ieșire:
/opt/hosts
Puteți folosi și expresia! pentru a verifica dacă fișierul nu există.
De exemplu, rulați următoarea comandă pentru a verifica dacă fișierul / etc / hosting nu există:
&& echo "File does not exist"
Sau
test ! -f /etc/hosting && echo "File does not exist"
Ar trebui să vedeți următoarea ieșire:
File does not exist
Testează dacă directorul există
Puteți afla, de asemenea, dacă există un director sau nu folosind opțiunea -d.
De exemplu, verificați dacă directorul / etc / apache2 există sau nu.
&& echo "Directory is exists"
Sau
test -d /etc/apache2 && echo "Directory is exists"
Ar trebui să vedeți următoarea ieșire:
Directory is exists
De asemenea, puteți crea un script bash cu expresii condiționale pentru a verifica dacă există sau nu un director.
Creați un fișier numit test.sh așa cum se arată mai jos:
nano test.sh
Adăugați următoarele linii:
Salvați și închideți fișierul când ați terminat. Apoi, acordați permisiunea corespunzătoare cu următoarea comandă:
chmod 755 test.sh
Apoi, testați dacă directorul / etc / nginx este disponibil sau nu cu următoarea comandă:
./test.sh /etc/nginx
Ar trebui să vedeți următoarea ieșire:
Directory /etc/nginx/ exists.
Apoi, testați dacă directorul / etc / linux este disponibil sau nu cu următoarea comandă:
./test.sh /etc/linux
Ar trebui să vedeți următoarea ieșire:
Directory /etc/linux does not exists
Operatori de testare a fișierelor în Bash
Următorii operatori de testare a fișierelor vă vor ajuta să verificați dacă există un „fișier” și are tipuri specifice:
- -b
FILE există și este bloc special - -c
FILE există și este caracter special - -d
FILE există și este un director - -e
FILE există - -f
FILE există și este un fișier obișnuit - -g
FILE există și este set-group-ID - -G
FILE ex este și este deținut de ID-ul grupului efectiv - -h
FILE există și este o legătură simbolică (la fel ca -L) - -k
FILE există și are setul său de biți lipicios - -L
FILE există și este o legătură simbolică (la fel ca -h) - -O
FILE există și este deținut de utilizatorul efectiv ID - -p
FILE există și este o țeavă numită - -r
FILE există și se acordă permisiunea de citire - -s
FILE există și are o dimensiune mai mare decât zero - -S
FILE există și este un socket - -u
FILE există și bitul său set-user-ID este setat - -w
FILE există și se acordă permisiunea de scriere - -x
FILE există și se acordă permisiunea de executare (sau căutare)