Como usar instruções Bash If (com 4 exemplos)

Publicados: 2023-05-08
Laptop Linux mostrando uma janela de terminal com um padrão de globo no fundo e uma marca d'água binária
fatmawati achmad zaenuri/Shutterstock
Use a instrução if do Linux Bash para criar expressões condicionais com uma estrutura if 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.

9 Exemplos de loops for em scripts bash do Linux
RELACIONADOS 9 Exemplos de for Loops em Scripts Bash do Linux

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 escrevendo fi .
  • 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 

Usando chmod para tornar um script executável

Vamos executar nosso script.

 ./if-age.sh 

Executando o script if-age.sh com a variável age definida como 25

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 

Executando o script if-age.sh com a variável age definida como 18

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 

Executando o script if-even.sh com várias entradas

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.

Usando o programa de teste na linha de comando para testar diferentes comparações

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 

Executando o script if-wild.sh mostrando a pesquisa curinga no teste condicional da instrução if

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 

Executando o script if-shop.sh com o relógio do computador definido para um dia da semana, depois uma quarta-feira e depois um domingo

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