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. |