Compreendendo o Bash If Else e Outras Declarações Condicionais

Escrever um script Bourne Again Shell (Bash) pode ser uma experiência gratificante, especialmente quando você adiciona lógica a ele, garantindo sua robustez. Uma maneira de incorporar essa lógica, tornando seu script mais inteligente, é por meio do uso de instruções condicionais, especificamente ‘bash if else’

Neste mergulho profundo, você está prestes a compreender o poder e as nuances das instruções Bash if-else e case. Isso ajudará você a criar scripts Bash inteligentes e livres de erros. Também vamos salpicar algumas melhores práticas para garantir que você esteja programando como um profissional.

Animado? Mergulhe e eleve seu conhecimento em script Bash!

Preparando o Palco: Pré-requisitos

Para aproveitar ao máximo este tutorial, há alguns essenciais que você deve ter em ordem:

  • A Linux or Windows system armed with Bash. For those on Windows, the Windows Subsystem for Linux (WSL) is your best bet.
  • A code/text editor to write and refine your ‘bash if else’ scripts.

Por Que Você Deve Aproveitar as Instruções bash if else?

Por que as instruções condicionais são tão reverenciadas na programação Bash? Simplesmente porque elas dotam seus scripts com capacidades de tomada de decisão baseadas em condições pré-definidas.

Por exemplo, você pode usar ‘bash if else’ para verificar se um arquivo existe antes de tentar deletá-lo. Alternativamente, você pode querer verificar se um usuário possui as permissões necessárias antes de permitir que ele acesse um recurso.

Inserir scripts com estruturas ‘bash if else’ não só amplifica sua flexibilidade, mas também sua potência. Imagine um script projetado para purgar todos os arquivos em uma pasta. Usando ‘bash if else’, você pode excluir cirurgicamente apenas aqueles arquivos com mais de 30 dias, preservando o resto.

Adentrando na Declaração ‘bash if else’

Agora, vamos deixar a introdução de lado e colocar a mão na massa. Começaremos com uma das declarações condicionais mais universalmente aceitas: a declaração ‘bash if else’.

Em seu cerne, o ‘bash if else’ é uma porta de entrada para inserir condicionais em seus scripts Bash. Observe sua sintaxe elegante abaixo:

  • Começa com a palavra-chave if, seguida pelas condições encapsuladas dentro de [[ ]]. Em seguida, o código que reside dentro da declaração ‘bash if else’ é executado, concluindo com a palavra-chave fi.
  • A palavra-chave then separa a condição das ações (ou declarações) que são executadas quando as condições são satisfeitas. Este bloco de ação pode abranger várias linhas, separadas por ponto e vírgula (;).
if [[ condition ]]; then
	statement
fi

Imagine escrever um sistema de login. Ele solicita o nome de usuário correto antes de conceder acesso:

1. Inicie seu terminal e inicie um novo arquivo bash_if_demo.sh utilizando seu editor de texto preferido. Este será nosso playground para entender as declarações ‘bash if else’.

nano bash_if_demo.sh

2. Insira o exemplo ‘bash if else’ fornecido abaixo no seu arquivo bash_if_demo.sh. Uma vez inserido, salve as modificações e saia do editor.

O script de exemplo ‘bash if else’ solicita um nome de usuário. Se o nome de usuário esperado for inserido, uma mensagem de boas-vindas é exibida, complementada pela data e hora atual.

Manter um registro da data e hora das tentativas de acesso do usuário pode ser inestimável para análises futuras.

A linha introdutória #!/bin/bash (conhecida como shebang) direciona o sistema sobre o interpretador a ser utilizado para processar o código subsequente no script. Aqui, ‘bash’ é nosso interpretador escolhido.

#!/bin/bash
# Imprime uma pergunta na tela.
echo "Whats your name?"
# Captura a entrada do teclado, armazenando-a na variável $NAME.
read NAME
# Inicia a declaração 'bash if else' - examina se o valor em $NAME 
# corresponde a "ATA". Se houver correspondência, o código entre as tags é executado. Caso contrário, é ignorado.
if [ $NAME == "ATA" ]
then
  # Exibe uma mensagem apenas se o valor em $NAME for igual a "ATA".
  echo "Welcome back ATA!"
fi
# Fora do 'bash if else', isso sempre mostra a data e hora atual.
date

3. Agora, vamos testar nosso script ‘bash if else’. Execute o comando abaixo:

bash bash_if_demo.sh

Lembre-se, independentemente da variante do shell Bash que você está utilizando, prefixe o nome do seu script com ‘bash’. Isso garante que o sistema utilize o Bash para a execução do script.

Digite “ATA” e pressione Enter. O resultado deve se assemelhar ao seguinte:

Demonstration of the bash_if_demo.sh ‘bash if else’ Script

Se você inserir qualquer coisa diferente de “ATA”, a mensagem de boas-vindas não será exibida na saída. Apenas a data e hora atual serão mostradas. Esse comportamento é atribuído à instrução ‘bash if else’, que verifica uma correspondência precisa com o valor na variável $NAME.

Observe que as instruções ‘bash if else’ diferenciam maiúsculas de minúsculas. Portanto, “ata,” “aTa,” “Ata,” e assim por diante, são distintos de “ATA.”

Outcome on Entering a Non-matching Value

Teste consistentemente seus scripts ‘bash if else’ com entradas variadas. Isso garante que os scripts funcionem conforme esperado.

Aprofundando: Instruções ‘bash if else’ Aninhadas

Você já compreendeu os fundamentos de criar instruções ‘bash if else’. Enquanto esse conhecimento fundamental é suficiente para tarefas simples, scripts mais complexos frequentemente exigem construções avançadas. É aqui que entram as instruções ‘bash if else’ aninhadas. Essencialmente, é uma declaração ‘if’ que abriga uma ou várias declarações ‘if’ adicionais.

A estrutura abaixo ilustra a sintaxe básica para instruções ‘bash if else’ aninhadas. Aqui, a cláusula externa if [[ condições ]] engloba código executável apenas mediante o cumprimento da condição. Em nosso contexto, o código aninhado é outra declaração ‘if’.

  • if [[ condições ]] – Isso representa o comando externo ‘bash if else’. O código aninhado (outro comando ‘if’) só é executado se a condição especificada for verdadeira.
  • if [[ condição2 ]] – Isso representa a cláusula interna ‘bash if else’. Contém código que é executado apenas se ambas as condições forem atendidas.
if [[ conditions ]]; then
	if [[ condition2 ]]; then
		statement
	fi
fi

Vamos aprofundar mais. Aprimorando nosso exemplo anterior de ‘bash if else’, agora incluiremos um if que questiona uma senha:

1. Primeiro, crie um novo arquivo chamado bash_nested_if_demo.sh usando seu editor de texto favorito.

nano bash_nested_if_demo.sh

2. Transfira o código ‘bash if else’ fornecido abaixo para o arquivo bash_nested_if_demo.sh, salve suas alterações e feche o editor.

Esse código ‘bash if else’ solicita tanto um nome quanto uma senha. Se as condições para o nome e a senha coincidirem, uma mensagem específica será exibida. Se não houver correspondência, a saída mostrará apenas a data e hora atuais.

#!/bin/bash
# Apresenta uma mensagem solicitando um nome de usuário.
echo "Whats your name?"
# Coleta a entrada do usuário.
read NAME
# Inicia a declaração 'bash if else' para verificar se $NAME corresponde a "ATA".
if [ $NAME == "ATA" ]
 then
 # Apresenta uma pergunta subsequente, desta vez para uma senha.
 echo "Password?"
 # Captura a entrada da senha.
 read Password
   # 'Bash if else' aninhado - Verifica se a $Password corresponde a "pwd123".
   if [ "$Password" == "pwd123" ]; then
     # Exibe uma mensagem se ambas as condições referentes a nome e senha forem atendidas.
     echo "You've successfully logged in as ATA."
   fi
fi
# Destaca a data e hora atuais.
date

3. Agora, vamos ver esse script ‘bash if else’ em ação. Execute o comando abaixo:

bash bash_nested_if_demo.sh

Para resultados ideais, insira ATA como o nome de usuário e pwd123 como a senha.

Demonstrating the bash_nested_if_demo.sh Script in action

Se suas entradas se desviarem de “ATA” ou “pwd123”, o único feedback que você receberá diz respeito à data e hora atuais. Isso ocorre porque a estrutura ‘bash if else’ exige o cumprimento de ambas as condições.

Validating if entered conditions are met using ‘bash if else’

Decodificando Declarações ‘Bash If Else’

Declarações ‘bash if else’ são fundamentais em scripts Bash, fornecendo capacidades decisivas aos seus scripts. No entanto, é crucial entender que o uso de declarações ‘if’ não é isento de desvantagens.

O desafio evidente é que o excesso de dependência do ‘if’ pode tornar seu código confuso, tornando-o tedioso e desafiador, especialmente quando múltiplos ‘if’ aninhados entram em jogo. Tais scripts correm o risco de se tornarem um “código espaguete”, caracterizado por uma legibilidade reduzida e uma complexidade aumentada.

Então, como você simplifica seu script ‘bash if else’ para que ele permaneça compreensível? Opte por declarações ‘if else’ em vez de um monte de ‘if’ aninhados. A palavra-chave ‘else’ oferece a conveniência de especificar um trecho de código para ser executado se a condição ‘if’ não for atendida.

Para uma perspectiva mais clara, considere a sintaxe para ‘Bash If Else’ abaixo, onde:

  • if [[ condições ]] – Aqui, a declaração ‘bash if else’ inclui o código (declaração1) que é acionado apenas quando a condição especificada é válida.
  • else – Isso faz parte da estrutura ‘bash if else’. A declaração else engloba o código (declaração2) que é executado quando a condição na cláusula if precedente não é satisfeita.
if [[ conditions ]]; then
	statement1
else
	statement2
fi

Imagine criar um simples jogo ‘bash if else’ onde o sistema espera um número aleatório do usuário:

1. Comece construindo um novo arquivo chamado bash_if_else_demo.sh.

nano bash_if_else_demo.sh

2. Integre o código ‘bash if else’ subsequente em seu arquivo bash_if_else_demo.sh, salve as alterações e saia.

O código subjacente ‘bash if else’ solicita ao usuário seu número da sorte. Se a entrada for par, ele exibe a mensagem ‘Você Ganhou!’. Ao contrário, um número ímpar aciona a saída ‘Você Perdeu!’.

#!/bin/bash
# Transmite um pedido para o dígito da sorte do usuário
echo -n "Input Your Lucky Number:"
# Aceita o número inserido.
read var
# Condição 'bash if else' para determinar se o valor é par.
if [ $((var%2)) == 0 ]; then
 # Anuncia uma vitória se a condição for atendida
 echo "You Won with 'bash if else'!"
else
 # Anuncia uma derrota se a condição não for atendida
 echo "You Lost using 'bash if else'!"
fi

3. Para testemunhar o funcionamento do script ‘bash if else’, execute o comando abaixo:

bash bash_if_else_demo.sh

Ao inserir um dígito par, você deverá ver a mensagem “Você ganhou com ‘bash if else’!”. Por outro lado, inserir um dígito ímpar deverá resultar no feedback “Você perdeu usando ‘bash if else’!”.

Run the ‘bash if else’ game, bash_if_else_demo.sh Script

Para enriquecer o script ‘bash if else’, considere incorporar um segmento que determine se o usuário insere uma letra ou um caractere distinto em vez de um número.

Decodificando ‘Bash If Else’ e Declarações de Caso

Neste momento, você explorou alguns métodos para tomar decisões em seus scripts Bash, nomeadamente as declarações ‘bash if else’. Mas o Bash oferece outra maneira de tomar decisões – a declaração case.

Similar ao ‘bash if else’, a declaração case é hábil em estipular sequências de código a serem executadas com base em condições especificadas. Uma vantagem notável com a declaração de caso é sua concisão e clareza, especialmente quando comparada a cenários aninhados de ‘bash if else’.

Para entender completamente a alternativa ‘bash if else’, vamos nos aprofundar na sintaxe da declaração case:

  • case $VAR in – Este segmento da construção case avalia a variável $VAR em relação a padrões definidos até que uma correspondência seja encontrada.
  • padrão1) e padrão2) – Estes são os critérios a serem testados, e uma vez que uma correspondência é detectada, o código correspondente (declaração1 ou declaração2) entra em ação.
  • esac – Conclui a estrutura case.
case $VAR in
pattern1)
    statement1
    ;;
pattern2)
    statement2
    ;;
esac

Imagine que você está projetando um script ‘bash if else’ onde os usuários inserem os nomes de seus países e, em resposta, o script exibe o idioma predominante daquele país.

1. Comece gerando um arquivo chamado bash_case_demo.sh.

nano bash_case_demo.sh

2. Incorpore o código ‘bash if else’ fornecido abaixo em seu arquivo bash_case_demo.sh, depois salve e saia.

O script ‘bash if else’ resultante solicitará ao usuário o nome de seu país e, com base nos padrões ‘case’, imprimirá o idioma principal falado no país mencionado.

3#!/bin/bash
# Interroga o usuário sobre seu país de residência
echo -n "In which country do you reside?"
# Captura a resposta do usuário.
read var
# Revela o idioma padrão no país selecionado pelo usuário ($var),
# baseando-se nos padrões dentro da estrutura 'case'.
echo -n "The official language of $var is "

# A instrução 'bash if else' case avalia se a entrada do usuário ($var) está alinhada com os padrões.
case $var in
# Estabelece padrões que revelam o idioma principal do país escolhido pelo usuário.
 US)
  echo -n "English"
  ;;

 Canada)
  echo -n "English and French"
  ;;

 Algeria | Bahrain | Egypt| Jordan)
  echo -n "Arabic"
  ;;

 *)
  echo -n "unknown"
  ;;
esac

3. Para experimentar este script ‘bash if else’ em primeira mão, utilize o comando subsequente:

bash bash_case_demo.sh

Você perceberá que o script destaca precisamente o idioma de acordo com o país escolhido pelo usuário.

Se o país fornecido não corresponder aos padrões estipulados, o padrão (*) padrão é acionado, resultando na saída “desconhecido.”

Illustrating the functionality of the bash_case_demo.sh Script

Conclusão das Declarações Condicionais do Bash

Neste guia, você embarcou na jornada de compreensão do ‘bash if else’ e outras declarações condicionais no Bash. Desde a simples instrução ‘if’ até as intrincadas instruções ‘if-else’ e ‘case’, agora você está equipado com ferramentas essenciais para scripts Bash eficazes.

Com esses fundamentos de ‘bash if else’ sob seu domínio, você pode construir scripts Bash com mais eficiência, reduzindo a margem para erros.

Mas lembre-se, isso é apenas a ponta do iceberg. O Bash oferece uma vasta gama de declarações condicionais. Talvez considere se aprofundar na declaração elif do Bash e nos operadores &&, OR e || para insights mais profundos. Com dedicação, dominar a escrita de scripts em Bash estará logo ao seu alcance!

Source:
https://adamtheautomator.com/bash-if-else/