logo

Bash comproveu si el fitxer existeix

La majoria de les vegades, podem trobar una situació en la qual necessitem realitzar una acció que comprovarà si existeix un fitxer o no.

A Bash, podem utilitzar una 'ordre de prova' per comprovar si existeix un fitxer i determinar el tipus d'un fitxer.

A continuació es mostren les sintaxis de l'ordre de prova, i podem utilitzar qualsevol d'aquestes ordres:

 test expression [ expression ] [[ expression ]] 

Hem d'utilitzar una única comanda '[' per fer que el nostre script sigui portàtil per a tots els shells POSIX. La versió actualitzada de l'ordre de prova conté parèntesis dobles '[[' que és compatible amb la majoria dels sistemes moderns que utilitzen Bash, Zsh i Ksh com a shell predeterminat.

Comproveu si el fitxer existeix

Mentre comproveu si existeix un fitxer, els operadors de fitxers més utilitzats són -e i -f. L'opció '-e' s'utilitza per comprovar si un fitxer existeix independentment del tipus, mentre que l'opció '-f' s'utilitza per retornar el valor real només si el fitxer és un fitxer normal (no un directori ni un dispositiu).

L'opció més comuna per comprovar si el fitxer existeix o no és utilitzar l'ordre de prova amb la 'sentència condicional if'.

A continuació es mostren els exemples per comprovar si existeix el fitxer 'read_file.txt':

Mètode 1

 #!/bin/bash File=read_file.txt if test -f '$File'; then echo '$File exist ' fi 

Mètode 2

 #!/bin/bash File=read_file.txt if [ -f '$File' ]; then echo '$File exist ' fi 

Mètode 3

 #!/bin/bash File=read_file.txt if [[ -f '$File' ]]; then echo '$File exist ' fi 

Sortida

La sortida dels tres mètodes serà la següent perquè tenim un fitxer (read_file.txt) present al directori:

intel·ligència artificial i agents intel·ligents
 read_file.txt exist 

Si volem realitzar una acció que proporcionarà un resultat en funció de si el fitxer existeix o no, podem utilitzar la construcció if/then de la següent manera:

Exemple

 #!/bin/bash File=read_file.txt if [ -f '$File' ]; then echo '$File exist' else echo '$File does not exist' fi 

Sortida

 read_file.txt exist 

També podem utilitzar l'ordre de prova sense la instrucció if. Podem utilitzar qualsevol dels mètodes següents:

Mètode 1

 #!/bin/bash File=read_file.txt test -f read_file.txt && echo '$File exist' 

Mètode 2

 #!/bin/bash File=read_file.txt [ -f read_file.txt ] && echo '$File exist' 

Mètode 3

 #!/bin/bash File=read_file.txt [[ -f read_file.txt ]] && echo '$File exist' 

Sortida

La sortida dels tres mètodes serà la següent perquè tenim un fitxer (read_file.txt) present al directori:

 read_file.txt exist 

Si s'han d'executar diverses ordres després de l'operador &&, afegiu les ordres entre claudàtors separats per punt i coma (;) o AND (&&), és a dir:

Exemple

 #!/bin/bash File=read_file.txt [ -f read_file.txt ] && { echo '$File exist'; echo 'Task Completed'; } 

A diferència de &&, la declaració després del || L'operador només s'executa si l'estat de sortida de l'ordre de prova és 'fals'.

Exemple

 #!/bin/bash File=read_file.txt [ -f read_file.txt ] && echo '$File exist' || echo '$File does not exist' 

Sortida

 read_file.txt exist 

Aquests són els mètodes utilitzats habitualment a Bash per comprovar si el fitxer existeix o no.

Comproveu si el directori existeix

L'operador '-d' ens permet comprovar si un fitxer és un directori o no.

A continuació es mostren els mètodes per comprovar si el directori 'Javatpoint' existeix:

Mètode 1

 #!/bin/bash File=Javatpoint if [ -d '$File' ]; then echo '$File is a directory' fi 

Mètode 2

 #!/bin/bash File=Javatpoint [ -d '$File' ] && echo '$File is a directory' 

Nota:També podem utilitzar claudàtors dobles '[[' en comptes d'un sol clau '[').

Sortida

La sortida dels dos mètodes anteriors serà la següent, ja que tenim un directori (anomenat Javatpoint) present a la ubicació especificada:

 Javatpoint is a directory 

Comproveu SI el fitxer no existeix

L'expressió de prova es pot negar utilitzant el signe d'exclamació (operador! -lògic NOT). Consulteu l'exemple següent:

Com trobar números bloquejats a Android

Exemple

 #!/bin/bash File=missing_read_file.txt if [ ! -f '$File' ]; then echo '$File does not exist' fi 

L'script anterior també es pot escriure de la següent manera:

 #!/bin/bash File=missing_read_file.txt [ ! -f '$File' ] && echo '$File unavailable' 

Sortida

 missing_read_file.txt unavailable 

Operadors de prova de fitxers

Les ordres de prova inclouen els següents operadors de fitxers que ens permeten provar tipus concrets de fitxers:

-b Retorna de fitxers 'True' si el FITXER existeix com a fitxer especial de bloc.
-c Retorna de fitxers 'True' si el FITXER existeix com a fitxer de caràcters especials.
-d Retorna de fitxers 'True' si el FITXER existeix com a directori.
-e El fitxer retorna 'True' si el FITXER existeix com a fitxer, independentment del tipus (node, directori, sòcol, etc.).
-f El fitxer retorna 'True' si el FITXER existeix com a fitxer normal (no un directori o dispositiu).
-G Retorna de fitxers 'True' si el FITXER existeix i conté el mateix grup que l'usuari executa l'ordre.
-h Retorna de fitxers 'True' si el FITXER existeix com a enllaç simbòlic.
-g Retorna del fitxer 'True' si el FITXER existeix i conté un conjunt de senyaladors set-group-id (sgid).
-k Retorna de fitxers 'True' si el FITXER existeix i conté un conjunt de senyaladors de bits enganxosos.
-L File Returns 'True' si el FITXER existeix com a enllaç simbòlic.
-O File Returns 'True' si el FITXER existeix i és propietat de l'usuari que executa l'ordre.
-p El fitxer retorna 'True' si el FITXER existeix com a canalització.
-r El fitxer retorna 'True' si el FITXER existeix com a fitxer llegible.
-S Retorn de fitxers 'True' si el FITXER existeix com a sòcol.
-s Retorn de fitxers 'True' si el FITXER existeix i té una mida diferent de zero.
-u File Returns 'True' si el FITXER existeix i s'estableix la marca set-user-id (suid).
-w Retorna de fitxers 'True' si el FITXER existeix com a fitxer que es pot escriure.
-x Retorna de fitxers 'True' si el FITXER existeix com a fitxer executable.