logo

Bash verifica se o arquivo existe

Na maioria das vezes, podemos encontrar uma situação em que precisaremos realizar uma ação que irá verificar se um arquivo existe ou não.

No Bash, podemos usar um 'comando de teste' para verificar se existe um arquivo e determinar o tipo de arquivo.

A seguir estão as sintaxes do comando test, e podemos usar qualquer um destes comandos:

 test expression [ expression ] [[ expression ]] 

Somos obrigados a usar um único comando '[' de colchete para tornar nosso script portátil para todos os shells POSIX. A versão atualizada do comando de teste contém colchetes duplos '[[' que são suportados na maioria dos sistemas modernos que usam Bash, Zsh e Ksh como shell padrão.

Verifique se o arquivo existe

Ao verificar se existe um arquivo, os operadores de arquivo mais comumente usados ​​são -e e -f. A opção '-e' é usada para verificar se um arquivo existe independentemente do tipo, enquanto a opção '-f' é usada para retornar o valor verdadeiro apenas se o arquivo for normal (não um diretório ou dispositivo).

A opção mais comum para verificar se o arquivo existe ou não é usar o comando test com a 'instrução condicional if'.

A seguir estão os exemplos para verificar se o arquivo 'read_file.txt' existe:

Método 1

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

Método 2

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

Método 3

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

Saída

A saída para todos os três métodos será a seguinte porque temos um arquivo (read_file.txt) presente no diretório:

tipos de testes
 read_file.txt exist 

Se quisermos executar uma ação que fornecerá um resultado baseado na existência ou não do arquivo, podemos usar a construção if/then da seguinte maneira:

Exemplo

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

Saída

 read_file.txt exist 

Também podemos usar o comando test sem a instrução if. Podemos usar qualquer um dos seguintes métodos:

Método 1

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

Método 2

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

Método 3

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

Saída

derivada parcial de látex

A saída para todos os três métodos será a seguinte porque temos um arquivo (read_file.txt) presente no diretório:

 read_file.txt exist 

Se houver vários comandos a serem executados após o operador &&, coloque os comandos entre chaves separados por ponto e vírgula (;) ou AND (&&), ou seja:

Exemplo

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

Ao contrário de &&, a instrução após || O operador é executado somente se o status de saída do comando de teste for 'falso'.

Exemplo

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

Saída

 read_file.txt exist 

Estes são os métodos comumente usados ​​no Bash para verificar se o arquivo existe ou não.

Verifique se o diretório existe

O operador '-d' nos permite testar se um arquivo é um diretório ou não.

A seguir estão os métodos para verificar se o diretório ‘Javatpoint’ existe:

Método 1

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

Método 2

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

Observação:Também podemos usar colchetes duplos '[[' em vez de um colchete único '['.

Saída

A saída para ambos os métodos acima será a seguinte, pois temos um diretório (chamado Javatpoint) presente no local especificado:

 Javatpoint is a directory 

Verifique se o arquivo não existe

A expressão de teste pode ser negada usando o ponto de exclamação (operador NOT lógico!). Confira o exemplo a seguir:

Exemplo

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

O script acima também pode ser escrito como abaixo:

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

Saída

 missing_read_file.txt unavailable 

Operadores de teste de arquivo

Os comandos de teste incluem os seguintes operadores de arquivo que nos permitem testar tipos específicos de arquivos:

-b Retornos de arquivo 'True' se o FILE existir como um arquivo especial de bloco.
-c Retornos de arquivo 'True' se o FILE existir como um arquivo de caracteres especiais.
-d Retornos de arquivo 'True' se o FILE existir como um diretório.
-e Retornos de arquivo 'True' se o FILE existir como um arquivo, independentemente do tipo (nó, diretório, soquete, etc.).
-f Retornos de arquivo 'True' se o FILE existir como um arquivo normal (não um diretório ou dispositivo).
-G Devoluções de arquivo 'True' se o FILE existir e contiver o mesmo grupo que o usuário está executando o comando.
-h Retornos de arquivo 'True' se o FILE existir como um link simbólico.
-g Retornos de arquivo 'True' se o FILE existir e contiver o conjunto de sinalizadores set-group-id (sgid).
-k Retornos de arquivo 'True' se o FILE existir e contiver um sinalizador de sticky bit definido.
-L Retornos de arquivo 'True' se o FILE existir como um link simbólico.
-O Arquivo retorna 'True' se o FILE existir e pertencer ao usuário que está executando o comando.
-p Retornos de arquivo 'True' se o FILE existir como um canal.
-r Retornos de arquivo 'True' se o FILE existir como um arquivo legível.
-S Retornos de arquivo 'True' se o FILE existir como um soquete.
-s Retornos de arquivo 'True' se o FILE existir e tiver tamanho diferente de zero.
-u Retornos de arquivo 'True' se o FILE existir e o sinalizador set-user-id (suid) estiver definido.
-w Retornos de arquivo 'True' se o FILE existir como um arquivo gravável.
-x Retornos de arquivo 'True' se o FILE existir como um arquivo executável.