Bash é incrivelmente flexível e oferece várias opções para testar arquivos. E se você está procurando uma maneira de testar seus arquivos, os operadores de teste de arquivo do Bash levarão você a lugares.
Neste tutorial, você aprenderá diferentes operadores de teste de arquivo e como usá-los para verificar se um arquivo existe, é legível, está vazio, e assim por diante.
Continue lendo e faça amizade com os operadores de teste de arquivo do Bash!
Pré-requisitos
Este tutorial será uma demonstração prática. Se deseja acompanhar, certifique-se de ter o seguinte:
- A Linux system with Bash installed – This tutorial uses Ubuntu 20.04.
A maioria das distribuições Linux possui o Bash instalado por padrão. Mas se estiver usando o Windows, você pode instalar o Subsistema Windows para Linux (WSL) para obter um shell Bash.
- A user account with sudo privileges to run commands as root – This tutorial uses a root account for simplicity. But using a non-root user with sudo access is always recommended.
- Este tutorial presume que você possui acesso SSH ao seu sistema Linux.
O que são Operadores de Teste de Arquivos Bash?
Antes de colocar as mãos na massa com os operadores de teste, dê uma olhada em como eles funcionam. Os operadores de teste de arquivos permitem que você teste vários aspectos de um arquivo, como se um arquivo existe, é legível/gravável, etc.
Usar operadores de teste de arquivos pode ajudar a prevenir erros em seus scripts Bash. O código abaixo é um modelo para a instrução if. A instrução if-else é uma ferramenta poderosa que você frequentemente verá em scripts Bash.
Lembre-se de que as partes then e else do bloco de código são opcionais. Você pode usar uma instrução if sem elas.
Verificando se um Arquivo Existe
Você viu um vislumbre de como os operadores de teste funcionam, mas isso não é o suficiente para entender completamente como usá-los. Então, comece com um exemplo básico, como verificar se um arquivo existe.
No mundo real, você pode querer verificar se um arquivo de configuração existe antes de criar um. Você não quer perder tempo construindo um arquivo de configuração do zero apenas para descobrir que o mesmo já existe.
Para verificar se um arquivo já existe:
1. Abra seu terminal e execute o comando touch abaixo para criar um novo arquivo test.txt. Este comando não fornece saída, mas você verificará o arquivo no próximo passo.
2. Em seguida, execute o seguinte comando ls para listar o arquivo recém-criado (test.txt) no seu diretório de trabalho.
A saída abaixo verifica que você criou com sucesso o arquivo test.txt.
Agora que você tem um arquivo de teste, você pode usar o bloco de código padrão em um script Bash para verificar se o arquivo existe nos seguintes passos.

3. Execute o comando abaixo para criar (touch) e abrir um novo arquivo de script shell (if_file_exists.sh) no seu editor de texto preferido (nano).
4. Agora, preencha o código abaixo no seu novo arquivo if_file_exists.sh, salve o arquivo e feche o editor.
- Executa uma instrução if-else para testar se um arquivo especificado existe.
- Se o operador retornar verdadeiro, você receberá uma mensagem dizendo que o arquivo existe.
- Se o operador retornar falso, você receberá uma mensagem dizendo que o arquivo não existe. Mas desta vez, o arquivo é criado automaticamente, levando o nome que você definiu na variável FILE.
A linha #!/bin/bash no topo do arquivo é conhecida como shebang. Uma shebang informa ao seu sistema qual interpretador usar para executar o script, neste caso, o Bash. Se você não incluir uma shebang, seu sistema usará o interpretador padrão, que pode não ser o Bash. A ausência da shebang pode fazer com que seu script falhe.
5. Execute o comando abaixo para executar o seu novo script (if_file_exists.sh)
Se tudo correr bem, você verá a mensagem test.txt exists impressa no seu terminal, como mostrado abaixo.

6. Em seguida, execute os seguintes comandos para excluir (rm -rf) o arquivo de teste (test.txt) e listar todos os arquivos no seu diretório de trabalho.
Abaixo, você pode verificar que o test.txt não está mais listado.

7. Rode o comando abaixo para executar o seu script if_file_exists.sh.
Como o arquivo test.txt não existe mais, o script cria um novo arquivo test.txt quando o operador -e retorna falso.

8. Por fim, execute o comando ls abaixo para listar o arquivo test.txt no seu diretório de trabalho.
A saída abaixo confirma que seu script criou um novo arquivo test.txt.

Verificando se um Arquivo é um Arquivo Regular ou Especial
Antes de abrir ou processar um arquivo, você pode querer verificar primeiro se esse arquivo é regular ou especial. Por quê? Um arquivo especial é um tipo de arquivo armazenado em um sistema de arquivos, então tenha cuidado para não mexer com esses arquivos.
Por exemplo, um erro comum ao abrir um arquivo especial é o erro “No such file or directory”. Esse erro ocorre quando o arquivo que você está tentando abrir não existe. Mas o mesmo erro também pode ocorrer ao abrir um arquivo especial em vez de um regular.
Abra um novo arquivo special_file.sh no seu editor de texto, adicione o código a seguir e salve as alterações.
O código abaixo é semelhante ao anterior. Mas este código utiliza o operador -f
em vez do operador -e
. O operador -f
testa se um arquivo especificado (/dev/vmmon
) é um arquivo regular.
Agora, execute o comando abaixo para executar seu script special_file.sh
.
Já que o arquivo (/dev/vmmon) especificado na variável FILE
é um arquivo especial, você receberá a mensagem abaixo.

Verificando se um Diretório Existe
Até agora, você aprendeu como verificar se um arquivo existe. Mas o mesmo método se aplica a diretórios? Sim, usando o operador de teste -d
. Este operador é útil se você planeja tomar uma ação com base se um diretório existe ou não.
Talvez você queira copiar todos os arquivos de um diretório para outro. Se o diretório de destino não existir, você pode criá-lo antes de copiar os arquivos.
1. Execute o comando ls abaixo para listar o exemplo-dir do diretório de trabalho.
Você receberá uma mensagem dizendo “No such file or directory” pois o diretório não existe. Se você não quiser que o fluxo seja interrompido apenas porque um diretório não existe, pule para o próximo passo.

2. Em seguida, abra um novo arquivo chamado if_dir_exists.sh no seu editor de texto, adicione o código abaixo e salve o arquivo. O código a seguir testa se um diretório especificado existe e realiza tarefas dependendo do valor retornado pelo operador -d.
Você pode alcançar o mesmo resultado trocando as declarações if e else usando o operador de negação (!). Em situações do mundo real, o operador ! pode ajudar a escrever um script mais limpo e conciso.
3. Agora, execute o comando abaixo para executar o seu script (if_dir_exists.sh)
Você pode ver a mensagem dizendo que o diretório foi criado e o arquivo test.txt foi copiado, já que o example_dir não existe.

4. Finalmente, execute o comando ls no diretório example_dir para confirmar que o diretório existe e contém o arquivo test.txt.

Verificando se um Arquivo está Vazio
Você já sabe como usar os três operadores de teste de arquivo mais usados (-e, -f e -d) para aprimorar suas habilidades de script. Mas ainda existem outros operadores que você gostaria de explorar.
Geralmente, em vez de destacar o conteúdo de um arquivo para copiá-lo para outro arquivo, você executaria um comando para fazer o trabalho por você. Mas espere, pois o arquivo de destino pode não estar vazio.
Por que não usar o operador -s
para verificar se um arquivo existe e não está vazio? Este operador retorna verdadeiro se o arquivo existir e tiver um tamanho maior que zero.
1. Abra um novo arquivo chamado empty_file.sh no seu editor de texto, adicione o seguinte código e salve o arquivo.
O código a seguir testa se um arquivo especificado está vazio e imprime uma mensagem dependendo do valor retornado pelo operador -s.
2. Agora, execute o comando abaixo para executar seu script (empty_file.sh).
Abaixo, você pode ver a mensagem dizendo que test.txt não existe ou está vazio. Mas simultaneamente, o script adiciona texto ao arquivo test.txt.

3. Execute o comando cat abaixo para verificar se o arquivo test.txt contém o texto adicionado.

4. Finalmente, execute novamente o comando bash abaixo para executar o script empty_file.sh.
Abaixo, você pode ver a saída mudou para test.txt existe e não está vazio, uma vez que o arquivo test.txt agora contém algum texto e tem um tamanho maior que zero (0).

Verificando se um Arquivo Existe e é Legível
Talvez sua automação envolva a leitura de arquivos para realizar tarefas. O sucesso dessas tarefas dependerá se os arquivos são legíveis. Escrever um script para verificar se um arquivo existe e é legível será útil como solução.
Para demonstrar a verificação se um arquivo existe e é legível:
1. Execute o seguinte comando para fazer login em outra conta de usuário (ata).
Seu prompt muda ($) para indicar que você está logado como outro usuário.

Alternativamente, você pode alterar a permissão do arquivo para legível, gravável ou ambos com o comando chmod.
2. Depois de fazer login, crie um novo arquivo chamado readable_file.sh com seu editor de texto
Adicione o seguinte código ao arquivo readable_file.sh e salve as alterações. Este código verifica se um arquivo chamado test.txt no diretório /root existe e é legível.
3. Agora, execute o comando abaixo para executar o script readable_file.sh.
Desta vez, você verá uma mensagem dizendo que /root/test.txt não existe ou não é legível. Como o arquivo text.test está localizado no diretório /root, o usuário atual (ata) não tem permissões de leitura para o arquivo text.txt.

4. Por fim, execute os comandos abaixo para realizar o seguinte:
- Altere o arquivo sudoers para permitir que o usuário atual (ata) use
sudo
para executar comandos elevados.
- Execute o script readable_file.sh, que testa se um arquivo específico é legível.
Você pode ver abaixo que a saída imprime test.txt existe e é legível porque o usuário ata agora tem permissão de leitura para o arquivo test.txt.

Conclusão
A testing phase is always a priority before making drastic changes, whether on files or directories on your system. And in this tutorial, you’ve learned about the Bash file test operators and how to use them to test if a file (regular or special) or directory exists or if a file is readable or not.
Com essas habilidades recém-descobertas, você pode decidir com confiança qual ação tomar com base no resultado dos testes. Mas há muitas outras maneiras de você usar os operadores de teste de arquivo do Bash.
Que tal tentar verificar a extensão de um arquivo? Ou talvez verificar se vários arquivos existem para ver se todos os arquivos que você precisa estão disponíveis?