Olá amigo estudante.
A diferença entre usar ou não colchetes ([ ... ]) em condições dentro de scripts shell está relacionada ao tipo de comando que você está testando.
Vamos explicar claramente:
if ping -c 1 8.8.8.8 > /dev/null; then
...
fi
Aqui não é necessário colchetes porque:
- O
ifestá testando o código de saída do comandoping. - O comando
pingretorna 0 se tiver sucesso, ou diferente de 0 se falhar. - O
ifem shell simplesmente verifica se o comando foi bem-sucedido (ou seja, retorno0).
Portanto, funciona assim:
if COMANDO; then
# se COMANDO retornar 0 (sucesso), entra aqui
fi
Usa-se quando você quer fazer testes de comparação, por exemplo:
if [ "$nome" = "João" ]; then
echo "Olá, João"
fi
Ou:
if [ -f /etc/passwd ]; then
echo "Arquivo existe"
fi
Nesse caso, os colchetes são um comando chamado test. Exemplo:
if test "$nome" = "João"; then ...
é o mesmo que:
if [ "$nome" = "João" ]; then ...
Então, quando usar colchetes?
| Situação | Sintaxe recomendada |
|---|---|
| Verificar sucesso de um comando | if comando; then ... |
| Comparar strings, números, arquivos etc. | if [ condição ]; then ... ou if [[ condição ]]; then ... |
- Use
[[ ... ]](colchetes duplos) em Bash para expressões mais robustas (ex: regex). - O
[[ ... ]]é mais moderno e seguro para strings (ex: não precisa escapar>ou usar aspas sempre).
Exemplos:
# Testando comando
if ping -c 1 8.8.8.8 > /dev/null; then
echo "Conectado"
fi
# Testando variável
if [ "$usuario" = "admin" ]; then
echo "Bem-vindo, admin"
fi
Qualquer duvida comente ai.
Bons estudos.
Até...
:)