Ao criar um script bash, você pode encontrar uma situação em que precisa descobrir se um arquivo existe ou não para realizar alguma ação com ele. Você pode usar o comando test para verificar se o arquivo existe e de que tipo é.
Neste tutorial, mostraremos como verificar se o arquivo existe nos sistemas operacionais baseados em Linux.
Sintaxe básica do comando de teste
A sintaxe básica do comando de teste para verificar se o arquivo existe, conforme mostrado abaixo:
test -e file
Ou
test -f file
Onde:
- -e
Esta opção irá verificar se um arquivo existe independentemente do tipo. - -f
Esta opção irá verificar se um arquivo existe apenas se o ARQUIVO for um arquivo normal.
Você deve ver a página do manual do comando de teste conforme mostrado abaixo:
man test
Você deve ver a seguinte tela :
Teste se o arquivo existe usando a linha de comando
Nesta seção, mostraremos a você como verificar se o arquivo existe usando a linha de comando:
Execute o seguinte comando para verificar se existe um arquivo chamado / etc / fstab (T rue):
test -f /etc/fstab
Em seguida, execute o seguinte comando para definir o código de saída para 0 ou 1, sempre que o teste for bem-sucedido ou não.
echo $?
Resultado:
0
A saída é 0, o que significa que o arquivo / etc / fstab existe.
Você também pode use o seguinte comando para verificar se o arquivo existe:
echo $0
Resultado:
0
Em seguida, execute o seguinte comando para testar se o arquivo / etc / fabab existe ( Falso).
test -f /etc/fabab
echo $?
Resultado:
1
A saída é 1, o que significa que o arquivo / etc / fabab não existe.
Você também pode testar se um arquivo chamado /etc/rc.local existe ou não usando a execução condicional bash conforme mostrado abaixo:
test -f /etc/rc.local && echo "Exists" || echo "Not Exists"
Ou
&& echo "Exists" || echo "Not Exists"
Se o arquivo chamado /etc/rc.local existir, você deverá ver a seguinte saída:
Exists
Você também pode verificar se existem vários arquivos ou não usando um único comando:
&& echo "both files exist"
Ou
test -f /etc/passwd -a -f /etc/crontab && echo "both files exist"
Você deve ver a seguinte saída:
both files exist
Teste se o arquivo existe no Bash
Nesta seção, criaremos um script bash e verificaremos se um arquivo existe ou não, imprimindo uma mensagem.
Vamos criar um arquivo chamado test.sh e verificar se um arquivo /etc/rc.local existe ou não:
nano test.sh
Adicione as seguintes linhas:
#!/bin/bash
FILE=/etc/rc.local
if ; then
echo "The file "$FILE" exists."
else
echo "The file "$FILE" is not exists."
fi
Salve e feche o arquivo e execute o script com o seguinte comando:
bash test.sh
Você deve ver a seguinte saída:
The file "/etc/rc.local" exists.
Agora, vamos criar um arquivo test.sh e testar se o arquivo / etc / rc.localad existe ou não:
nano test.sh
Adicione as seguintes linhas:
#!/bin/bash
FILE=/etc/rc.localad
if ; then
echo "The file "$FILE" exists."
else
echo "The file "$FILE" is not exists."
fi
Salve e feche o arquivo e execute o script com o seguinte comando:
bash test.sh
Você deve ver a seguinte saída:
The file "/etc/rc.localad" is not exists.
Você também pode descobrir se um arquivo existe ou não e executar alguma ação nele no script bash.
Por exemplo, encontre um arquivo chamado / etc / hosts e copie-o para o diretório / opt se o arquivo existir.
Para fazer isso, crie um arquivo chamado test.sh:
nano test.sh
Adicione as seguintes linhas:
FILE=/etc/hosts
if ; then
cp $FILE /opt
fi
Salve e feche o arquivo e execute o script usando o seguinte comando:
Agora, teste o diretório / opt com o seguinte comando:
ls /opt/hosts
Você deve ver o arquivo hosts na seguinte saída:
/opt/hosts
Você também pode usar a expressão! para verificar se o arquivo não existe.
Por exemplo, execute o seguinte comando para verificar se o arquivo / etc / hosting não existe:
&& echo "File does not exist"
Ou
test ! -f /etc/hosting && echo "File does not exist"
Você deve ver a seguinte saída:
File does not exist
Teste se o diretório existe
Você também pode descobrir se um diretório existe ou não usando a opção -d.
Por exemplo, verifique se o diretório / etc / apache2 existe ou não.
&& echo "Directory is exists"
Ou
test -d /etc/apache2 && echo "Directory is exists"
Você deve ver a seguinte saída:
Directory is exists
Você também pode criar um script bash com expressões condicionais para verificar se um diretório existe ou não.
Crie um arquivo chamado test.sh conforme mostrado abaixo:
nano test.sh
Adicione as seguintes linhas:
Salve e feche o arquivo quando terminar. Então, dê permissão adequada com o seguinte comando:
chmod 755 test.sh
Em seguida, teste se o diretório / etc / nginx está disponível ou não com o seguinte comando:
./test.sh /etc/nginx
Você deve ver a seguinte saída:
Directory /etc/nginx/ exists.
Em seguida, teste se o diretório / etc / linux está disponível ou não com o seguinte comando:
./test.sh /etc/linux
Você deve ver a seguinte saída:
Directory /etc/linux does not exists
Operadores de teste de arquivo no Bash
Os seguintes operadores de teste de arquivo o ajudarão a verificar se um “arquivo” existe e tem tipos específicos:
- -b
FILE existe e é um bloco especial - -c
FILE existe e é um caractere especial - -d
FILE existe e é um diretório - -e
FILE existe - -f
FILE existe e é um arquivo normal - -g
FILE existe e é set-group-ID - -G
FILE ex ists e pertence ao ID de grupo efetivo - -h
FILE existe e é um link simbólico (o mesmo que -L) - -k
FILE existe e tem seu sticky bit set - -L
FILE existe e é um link simbólico (o mesmo que -h) - -O
FILE existe e é propriedade do usuário efetivo ID - -p
FILE existe e é um pipe nomeado - -r
FILE existe e a permissão de leitura é concedida - -s
FILE existe e tem um tamanho maior que zero - -S
FILE existe e é um soquete - -u
FILE existe e seu bit set-user-ID está definido - -w
FILE existe e permissão de gravação é concedida - -x
FILE existe e permissão de execução (ou pesquisa) é concedida