Como usar instruções Bash If (com 4 exemplos)
Publicados: 2023-05-08if
then
fi
. Adicione palavras-chave elif
para expressões condicionais adicionais ou a palavra-chave else
para definir uma seção abrangente de código que será executada se nenhuma cláusula condicional anterior tiver sido executada.Todos os scripts Bash não triviais precisam tomar decisões. A instrução Bash if permite que seu script Linux faça perguntas e, dependendo da resposta, execute diferentes seções de código. Veja como eles funcionam.
O que é execução condicional?
Em todos os scripts Bash, exceto nos mais triviais, geralmente é necessário que o fluxo de execução siga um caminho diferente no script, de acordo com o resultado de uma decisão. Isso é chamado de execução condicional.
Uma maneira de decidir qual ramo de execução tomar é usar uma instrução if
. Você pode ouvir instruções if
chamadas de instruções if then
ou if then else
. São nomes diferentes para a mesma coisa.
A instrução if
diz que, se algo for verdadeiro, faça isso . Mas se algo for falso, faça isso . O “algo” pode ser muitas coisas, como o valor de uma variável, a presença de um arquivo ou se duas strings correspondem.
A execução condicional é vital para qualquer script significativo. Sem isso, você fica muito limitado no que pode fazer com seu script. A menos que ele possa tomar decisões significativas, você não será capaz de resolver problemas do mundo real e produzir soluções viáveis.
A instrução if
é provavelmente o meio mais usado para obter a execução condicional. Veja como usá-lo no script Bash.
RELACIONADO: Como verificar se existe um arquivo em scripts bash do Linux
Um Exemplo Simples de Instrução If
Esta é a forma canônica da instrução if
mais simples:
if [esta-condição-é-verdadeira] então execute-estas-declarações fi
Se a condição dentro do texto for verdadeira, as linhas do script na cláusula then
serão executadas. Se você estiver procurando por scripts escritos por outras pessoas, poderá ver a instrução if
escrita assim:
if [esta-condição-é-verdadeira]; então execute-estas-declarações fi
Alguns pontos a observar:
- A instrução
if
é concluída escrevendofi
. - Deve haver um espaço após o primeiro colchete “
[
” e antes do segundo colchete “]
” do teste condicional. - Se você for colocar a palavra-chave
then
na mesma linha do teste condicional, certifique-se de usar um ponto e vírgula ”;
” após o teste.
Podemos adicionar uma cláusula else
opcional para executar algum código se o teste de condição for falso. A cláusula else
não precisa de uma palavra-chave then
.
if [esta-condição-é-verdadeira] então execute-estas-declarações outro execute-estas-declarações-ao invés fi
Este script mostra um exemplo simples de uma instrução if
que usa uma cláusula else
. O teste condicional verifica se a idade do cliente é maior ou igual a 21 anos. Se for, o cliente pode entrar nas instalações e a cláusula then
é executada. Se eles não tiverem idade suficiente, a cláusula else
será executada e eles não poderão entrar.
#!/bin/bash customer_age=25 se [$customer_age -ge 21] então echo "Entre." outro echo "Você não pode entrar." fi
Copie o script acima em um editor, salve-o como um arquivo chamado “if-age.sh” e use o comando chmod
para torná-lo executável. Você precisará fazer isso com cada um dos scripts que discutimos.
chmod +x if-age.sh
Vamos executar nosso script.
./if-age.sh
Agora vamos editar o arquivo e usar uma idade inferior a 21 anos.
customer_age=18
Faça essa alteração em seu script e salve suas alterações. Se a executarmos agora, a condição retornará false e a cláusula else será executada.
./if-age.sh
A cláusula elif
A cláusula elif
adiciona testes condicionais adicionais. Você pode ter quantas cláusulas elif
quiser. Eles são avaliados sucessivamente até que um deles seja considerado verdadeiro. Se nenhum dos testes condicionais elif
for verdadeiro, a cláusula else
, se presente, será executada.
Este script pede um número e diz se é par ou ímpar. Zero é um número par, então não precisamos testar nada.
Todos os outros números são testados encontrando o módulo de uma divisão por dois. No nosso caso, o módulo é a parte fracionária do resultado de uma divisão por dois. Se não houver parte fracionária, o número é divisível por dois, exatamente. Portanto é um número par.
#!/bin/bash echo -n "Digite um número: " ler número se [$número -eq 0] então echo "Você digitou zero. Zero é um número par." elif [ $(($número % 2)) -eq 0 ] então echo "Você digitou $number. É um número par." outro echo "Você digitou $number. É um número ímpar." fi
Para executar este script, copie-o para um editor e salve-o como “if-even.sh” e use chmod para torná-lo executável.
Vamos executar o script algumas vezes e verificar sua saída.
./if-even.sh
Está tudo funcionando bem.
Diferentes formas de teste condicional
Os colchetes ” []
” que usamos para nossos testes condicionais são uma maneira abreviada de chamar o programa test
. Por causa disso, todas as comparações e testes que test
suporta estão disponíveis para sua instrução if
.
Este é apenas alguns deles:
- ! expression : True se a expressão for false.
- -n string : Verdadeiro se o comprimento da string for maior que zero.
- -z string : Verdadeiro se o comprimento da string for zero. Ou seja, é uma string vazia.
- string1 = string2 : Verdadeiro se string1 for igual a string2.
- string1 != string2 : Verdadeiro se string1 não for igual a string2.
- integer1 -eq integer2 : Verdadeiro se integer1 for numericamente igual a integer2
- integer1 -qt integer2 : Verdadeiro se integer1 for numericamente maior que integer2
- integer1 -lt integer2 : Verdadeiro se integer1 for numericamente menor que integer2
- -d diretório : Verdadeiro se o diretório existir.
- -e arquivo : Verdadeiro se o arquivo existir.
- -s arquivo : Verdadeiro se o arquivo existir com um tamanho maior que zero.
- -r arquivo : Verdadeiro se o arquivo existir e a permissão de leitura estiver definida.
- -w arquivo : Verdadeiro se o arquivo existir e a permissão de gravação estiver definida.
- -x file : Verdadeiro se o arquivo existir e a permissão de execução estiver definida.
Na tabela, “arquivo” e “diretório” podem incluir caminhos de diretório, relativos ou absolutos.
O sinal de igual “ =
” e o teste de igualdade -eq
não são iguais. O sinal de igual executa uma comparação de texto caractere a caractere . O teste de igualdade realiza uma comparação numérica .
Podemos ver isso usando o programa test
na linha de comando.
test "esta string" = "esta string"
test "esta string" = "aquela string"
teste 1 = 001
teste 1 -eq 001
Em cada caso, usamos o comando echo
para imprimir o código de retorno do último comando. Zero significa verdadeiro, um significa falso.
Usar o sinal de igual ” =
” nos dá uma resposta falsa comparando 1 a 001. Isso é correto, porque são duas cadeias de caracteres diferentes. Numericamente, eles têm o mesmo valor - um - então o operador -eq
retorna uma resposta verdadeira.
Se você quiser usar a correspondência curinga em seu teste condicional, use a sintaxe de colchetes duplos ” [[ ]]
”.
#!/bin/bash se [[$USER == *ve]] então echo "Olá $USUÁRIO" outro echo "$USER não termina em 've'" fi
Este script verifica o nome da conta do usuário atual. Se terminar em “ ve
”, imprime o nome do usuário. Se não terminar em " ve
", o script informa isso e termina.
./if-wild.sh
RELACIONADOS: Teste Condicional em Bash: if, then, else, elif
Instruções If aninhadas
Você pode colocar uma instrução if
dentro de outra instrução if
.
Isso é perfeitamente aceitável, mas aninhar instruções if
torna o código menos fácil de ler e mais difícil de manter. Se você estiver aninhando mais de dois ou três níveis de instruções if
, provavelmente precisará reorganizar a lógica de seu script.
Aqui está um script que obtém o dia como um número, de um a sete. Um é segunda-feira, sete é domingo.
Diz-nos o horário de funcionamento de uma loja. Se for um dia de semana ou sábado, informa que a loja está aberta. Se for domingo, informa que a loja está fechada.
Se a loja estiver aberta, a instrução if
aninhada faz um segundo teste. Se o dia for quarta-feira, diz-nos que está aberto apenas de manhã.
#!/bin/bash # obtém o dia como um número 1..7 dia=$(data +"%u") se [$dia -le 6] então ## a loja está aberta se [$dia -eq 3] então # quarta-feira é meio dia echo "Às quartas-feiras abrimos apenas de manhã." outro # dias normais da semana e sábado echo "Estamos abertos o dia todo." fi outro # não abre aos domingos echo "É domingo, estamos fechados." fi
Copie este script em um editor, salve-o como um arquivo chamado “if-shop.sh” e torne-o executável usando o comando chmod
.
Executamos o script uma vez e, em seguida, alteramos o relógio do computador para uma quarta-feira e executamos o script novamente. Em seguida, mudamos o dia para um domingo e o executamos mais uma vez.
./if-shop.sh
./if-shop.sh
./if-shop.sh
RELACIONADO: Como usar testes condicionais de colchetes duplos no Linux
O caso Para se
A execução condicional é o que dá poder à programação e ao script, e a humilde instrução if
pode muito bem ser a maneira mais usada de alternar o caminho de execução no código. Mas isso não significa que é sempre a resposta.
Escrever um bom código significa saber quais opções você tem e quais são as melhores para resolver um determinado requisito. A instrução if
é ótima, mas não a deixe ser a única ferramenta em sua bolsa. Em particular, verifique a declaração case
que pode ser uma solução em alguns cenários.
RELACIONADO: Como usar instruções de caso em scripts Bash