Aula 9 — Ensine seu script a tomar decisões com if, then, else e fi
Uma instrução condicional permite que o script tome decisões: execute um bloco de comandos se uma condição for verdadeira, e outro (ou nenhum) se for falsa. É como um semáforo — verde executa, vermelho desvia.
⚠️ Espaços obrigatórios nos colchetes!
✅ [ $IDADE -ge 18 ] ❌ [$IDADE -ge 18]
Sempre um espaço depois de [ e antes de ]. E fi é if ao contrário — fecha o bloco.
Use estes operadores para comparar números inteiros dentro dos colchetes [ ].
| Operador | Significado | Exemplo |
|---|---|---|
-eq | Igual (=) | [ 5 -eq 5 ] |
-ne | Diferente (≠) | [ 5 -ne 3 ] |
-gt | Maior que (>) | [ 10 -gt 5 ] |
-ge | Maior ou igual (≥) | [ 10 -ge 10 ] |
-lt | Menor que (<) | [ 3 -lt 5 ] |
-le | Menor ou igual (≤) | [ 3 -le 5 ] |
💡 Dica de memorização: eq = equal • ne = not equal • gt = greater than • lt = lower than • ge/le = or equal
Para comparar textos, use estes operadores. Sempre coloque variáveis entre aspas para evitar erros com strings vazias ou com espaços.
| Operador | Significado |
|---|---|
= | Strings iguais |
!= | Strings diferentes |
-z | String vazia (zero length) |
-n | String não vazia (non-zero) |
⚠️ Sempre use aspas em variáveis de texto!
✅ [ "$VAR" = "valor" ] ❌ [ $VAR = valor ]
Sem aspas, uma variável vazia quebra a sintaxe do teste.
Esses operadores testam propriedades de arquivos e diretórios — essenciais para scripts que manipulam o sistema de arquivos com segurança.
| Operador | Verdadeiro se… |
|---|---|
-f | For um arquivo regular |
-d | For um diretório |
-e | Existir (arquivo ou pasta) |
-r | Tiver permissão de leitura |
-w | Tiver permissão de escrita |
-x | Tiver permissão de execução |
-s | Não estiver vazio (size > 0) |
💡 Sempre verifique se arquivo ou pasta existe antes de usar. Tentar ler um arquivo inexistente gera erro e interrompe o script.
| Operador | Nome | Significado |
|---|---|---|
-a | AND | Ambas as condições verdadeiras |
-o | OR | Pelo menos uma verdadeira |
! | NOT | Inverte o resultado |
O if pode testar diretamente o código de saída de qualquer comando — sem precisar de colchetes. Exit code 0 = verdadeiro; qualquer outro valor = falso.
💡 2>/dev/null suprime mensagens de erro. -q no grep deixa o comando silencioso — só o exit code importa. Essa técnica é muito usada em scripts de verificação.
⏰ Regras de ouro: espaços dentro dos [ ] • aspas em variáveis de string • verifique arquivos antes de usar • fi sempre fecha o bloco
Arraste cada descrição para o operador correto.
-gt
-z
-f
-d
-a
!
notas.sh com if/elif/else que classifica uma nota: ≥70 "Aprovado", ≥50 "Recuperação", caso contrário "Reprovado". Teste com três valores diferentes.checa_arquivo.sh que recebe um caminho e verifica: se é arquivo (-f), se é diretório (-d) ou se não existe (-e negado). Use read -p para pedir o caminho.acesso.sh que pergunta usuário e senha. Use -a (AND) para só liberar acesso se os dois valores estiverem corretos. Teste com credenciais certas e erradas.verifica_servico.sh que usa if systemctl is-active nginx (sem [ ]) para checar se o nginx está ativo. Se estiver, mostre "OK"; senão, mostre "Inativo".if é a base de scripts inteligentes. Combinando operadores numéricos, de string e de arquivo com operadores lógicos, você consegue criar scripts que se adaptam a qualquer cenário — do simples backup ao monitoramento de servidores.
Qual a sintaxe correta de um if em Bash?
if [ condição ]; then ... elif [ ... ]; then ... else ... fi. Note os espaços dentro dos colchetes!Qual operador testa se dois números são iguais em Bash?
-eq (igual), -ne (diferente), -lt (menor), -gt (maior). Para strings: == e !=.Qual flag testa se um arquivo existe e é um diretório?
-d = é diretório, -f = é arquivo regular, -e = existe (qualquer tipo), -r = tem permissão de leitura.Como combinar duas condições com E lógico (ambas devem ser verdadeiras)?
&& para E lógico e || para OU lógico entre condições. Ou use [[ cond1 && cond2 ]] em duplos colchetes.