Android

Cum să verificați dacă există un fișier sau director în bash

Pipe into commands and read from STDIN | #5 Practical Bash

Pipe into commands and read from STDIN | #5 Practical Bash

Cuprins:

Anonim

De multe ori când scrii scripturi Shell, te poți regăsi într-o situație în care trebuie să efectuezi o acțiune bazată pe existența unui fișier sau nu.

În Bash, puteți utiliza comanda test pentru a verifica dacă există un fișier și pentru a determina tipul de fișier.

Comanda test are una dintre următoarele forme de sintaxă:

test EXPRESSION]

Verificați dacă fișierul există

Când verificați dacă există un fișier, cei mai folosiți operatori FILE sunt -e și -f . Primul va verifica dacă un fișier există indiferent de tip, în timp ce cel de-al doilea va reveni adevărat numai dacă FILEUL este un fișier obișnuit (nu un director sau un dispozitiv).

Cea mai citită opțiune atunci când verificați dacă un fișier există sau nu este să folosiți comanda test în combinație cu instrucțiunea if. Oricare dintre fragmentele de mai jos va verifica dacă fișierul /etc/resolv.conf există:

FILE=/etc/resolv.conf if test -f "$FILE"; then echo "$FILE exist" fi

FILE=/etc/resolv.conf if; then echo "$FILE exist" fi

FILE=/etc/resolv.conf if]; then echo "$FILE exist" fi

Dacă doriți să efectuați o acțiune diferită pe baza dacă fișierul există sau nu folosiți doar construcția if / apoi:

FILE=/etc/resolv.conf if; then echo "$FILE exist" else echo "$FILE does not exist" fi Utilizați întotdeauna ghilimele duble pentru a evita probleme atunci când aveți de-a face cu fișiere care conțin spațiul alb în numele lor

Puteți utiliza, de asemenea, comanda test fără instrucțiunea if. Comanda după operatorul && va fi executată numai dacă starea de ieșire a comenzii de testare este adevărată, test -f /etc/resolv.conf && echo "$FILE exist"

&& echo "$FILE exist"

] && echo "$FILE exist"

&& { echo "$FILE exist"; cp "$FILE" /tmp/; }

Împotriva && , declarația după || operatorul va fi executat numai dacă starea de ieșire a comenzii test este false .

&& echo "$FILE exist" || echo "$FILE does not exist"

Verificați dacă directorul există

Operatorii -d vă permit să testați dacă un fișier este un director sau nu.

De exemplu, pentru a verifica dacă directorul /etc/docker există, ați folosi:

FILE=/etc/docker if; then echo "$FILE is a directory" fi

&& echo "$FILE is a directory"

De asemenea, puteți utiliza paranteze duble , 'linuxize_com-medrectangle-4', 'ezslot_7', 160, '0', '0']));

Verificați dacă fișierul nu există

Similar cu multe alte limbi, expresia testului poate fi anulată folosind funcția ! (semn de exclamare) logic nu operator:

FILE=/etc/docker if; then echo "$FILE does not exist" fi

La fel ca mai sus:

&& echo "$FILE does not exist"

Verificați dacă există mai multe fișiere

În loc să folosiți construcții complicate cu cuiburi, dacă / altceva, puteți folosi -a (sau && cu ; then echo "$FILE is a directory" fi

FILE=/etc/docker if; then echo "$FILE is a directory" fi

Variante echivalente fără a utiliza instrucțiunea IF:

&& echo "both files exist"

] && echo "both files exist"

Operatori de testare a fișierelor

Comanda test include următorii operatori FILE care vă permit să testați anumite tipuri de fișiere:

  • -b FILE - Adevărat dacă fișierul există și este un fișier special de bloc. -c FILE - Adevărat dacă fișierul există și este un fișier cu caractere speciale. -d FILE - Adevărat dacă fișierul există și este un director. -e FILE - Adevărat dacă fișierul există și este un fișier, indiferent de tip (nod, director, soclu etc.). -f FILE - Adevărat dacă fișierul există și este un fișier obișnuit (nu un director sau dispozitiv). -G FILE - Adevărat dacă fișierul există și are același grup ca și utilizatorul care execută comanda. -h FILE - Adevărat dacă fișierul există și este o legătură simbolică. -g FILE - Adevărat dacă FILE există și are set de pavilion set-group-id (sgid). -k FILE - Adevărat dacă fișierul există și are un steag lipicios setat. -L FILE - Adevărat dacă fișierul există și este o legătură simbolică. -O FILE - Adevărat dacă fișierul există și este deținut de utilizatorul care execută comanda. -p FILE - Adevărat dacă FILE există și este o conductă. -r FILE - Adevărat dacă fișierul există și poate fi citit. -S FILE - Adevărat dacă fișierul există și este socket. -s FILE - Adevărat dacă fișierul există și are dimensiuni diferite. -u FILE - Adevărat dacă este setat steagul existent și set-user-id (suid). -w FILE - Adevărat dacă fișierul există și poate fi scris. -x FILE - Adevărat dacă FILE există și este executabil.

Concluzie

În acest ghid, v-am arătat cum puteți verifica dacă există un fișier sau director folosind Bash.

terminalul bash