Introdução
Neste laboratório, você aprenderá a utilizar estruturas condicionais na programação shell para tomar decisões lógicas. Abordaremos a sintaxe básica das instruções if-else, bem como o uso de comparações numéricas e de strings para avaliar condições. Ao final deste laboratório, você estará apto a escrever scripts shell capazes de tomar decisões baseadas em diferentes cenários.
Crie Sua Primeira Instrução If
Vamos começar criando uma instrução if simples que verifica se uma variável chamada NAME é igual a "John".
Primeiro, abra um terminal no WebIDE. Você deve estar no diretório /home/labex/project por padrão. Se não tiver certeza, você sempre pode verificar seu diretório atual com o comando pwd.
Crie um novo arquivo chamado if.sh usando o seguinte comando:
touch if.sh
Este comando cria um arquivo vazio chamado if.sh no seu diretório atual.
Agora, abra o arquivo if.sh no WebIDE. Você pode fazer isso clicando no arquivo no explorador de arquivos no lado esquerdo do WebIDE.
Adicione o seguinte conteúdo ao arquivo:
#!/bin/bash
NAME="John"
if [ "$NAME" = "John" ]; then
echo "The name is John"
fi
Vamos analisar este script:
#!/bin/bash: Isso é chamado de linha "shebang". Ela informa ao sistema qual interpretador deve ser usado para executar o script. Neste caso, estamos usando o Bash.NAME="John": Esta linha cria uma variável chamadaNAMEe atribui a ela o valor "John".if [ "$NAME" = "John" ]; then: Este é o início da nossa instrução if. Ela verifica se o valor deNAMEé igual a "John".- Os colchetes
[ ]são, na verdade, um comando no Bash, equivalente ao comandotest. - Colocamos
"$NAME"entre aspas para lidar com casos ondeNAMEpossa estar vazio ou conter espaços. - O ponto e vírgula e o
thenfazem parte da sintaxe da instrução if no Bash.
- Os colchetes
echo "The name is John": Esta linha será executada se a condição for verdadeira.fi: Isso marca o fim da instrução if. É "if" escrito ao contrário!
Salve o arquivo após adicionar este conteúdo.
Agora, precisamos tornar o script executável. Em sistemas do tipo Unix, os arquivos não são executáveis por padrão por razões de segurança. Podemos mudar isso usando o comando chmod:
chmod +x if.sh
Este comando adiciona a permissão de execução ao arquivo. O +x significa "adicionar permissão de execução".
Agora, execute o script:
./if.sh
O ./ diz ao shell para procurar o script no diretório atual.
Você deve ver a saída: The name is John
Se você não vir essa saída, verifique novamente se salvou o arquivo com o conteúdo correto e se o tornou executável.
Adicione uma Cláusula Else
Agora, vamos expandir nossa instrução if para incluir uma cláusula else. Isso nos permite especificar o que deve acontecer quando a condição for falsa.
Abra o arquivo if.sh no WebIDE novamente e modifique-o da seguinte forma:
#!/bin/bash
NAME="Alice"
if [ "$NAME" = "John" ]; then
echo "The name is John"
else
echo "The name is not John"
fi
Vamos analisar as mudanças:
- Alteramos a variável
NAMEpara "Alice". Isso serve para demonstrar o que acontece quando a condição é falsa. - Adicionamos uma cláusula
else. Esta cláusula especifica o que deve acontecer se a condição na instrução if for falsa. - Após o
else, adicionamos outro comandoechoque será executado seNAMEnão for "John".
A cláusula else é opcional em instruções if, mas é muito útil quando você deseja realizar uma ação específica quando a condição é falsa, em vez de simplesmente não fazer nada.
Salve o arquivo com essas alterações.
Agora, execute o script novamente:
./if.sh
Desta vez, você deve ver a saída: The name is not John
Isso ocorre porque NAME agora é "Alice", logo a condição [ "$NAME" = "John" ] é falsa, e o código no bloco else é executado.
Tente alterar a variável NAME de volta para "John" e execute o script novamente. Qual saída você obtém? Esta é uma boa maneira de testar se sua instrução if-else está funcionando corretamente para ambos os casos.
Apresentando o Elif
Às vezes, queremos verificar múltiplas condições. É aqui que a cláusula elif (else if) se torna útil. Vamos modificar nosso script para lidar com vários nomes.
Atualize o arquivo if.sh com o seguinte conteúdo:
#!/bin/bash
NAME="George"
if [ "$NAME" = "John" ]; then
echo "John Lennon"
elif [ "$NAME" = "Paul" ]; then
echo "Paul McCartney"
elif [ "$NAME" = "George" ]; then
echo "George Harrison"
elif [ "$NAME" = "Ringo" ]; then
echo "Ringo Starr"
else
echo "Unknown member"
fi
Vamos analisar este script:
- Começamos com
NAME="George". Este será o nome que estamos verificando. - A primeira instrução
ifverifica se o nome é "John". - Se não for "John", passamos para a primeira instrução
elif(else if), que verifica se o nome é "Paul". - Se não for "Paul", passamos para o próximo
elif, verificando "George". - Se não for "George", verificamos "Ringo".
- Se nenhuma dessas condições for verdadeira, caímos na cláusula
else, que exibirá "Unknown member".
A cláusula elif permite verificar múltiplas condições em sequência. Você pode ter quantas cláusulas elif precisar. As condições são verificadas na ordem em que aparecem, e o primeiro bloco de código cuja condição for verdadeira será executado.
Salve o arquivo com essas alterações.
Agora, execute o script:
./if.sh
Você deve ver a saída: George Harrison
Tente alterar a variável NAME para valores diferentes ("John", "Paul", "Ringo" ou algo totalmente diferente) e execute o script a cada vez. Observe como a saída muda com base no valor de NAME.
Comparações Numéricas
Scripts shell também podem comparar números. Vamos criar um novo script para demonstrar comparações numéricas.
Crie um novo arquivo chamado numeric.sh:
touch numeric.sh
Abra o numeric.sh no WebIDE e adicione o seguinte conteúdo:
#!/bin/bash
NUMBER=10
if [ $NUMBER -lt 5 ]; then
echo "The number is less than 5"
elif [ $NUMBER -eq 10 ]; then
echo "The number is exactly 10"
elif [ $NUMBER -gt 15 ]; then
echo "The number is greater than 15"
else
echo "The number is between 5 and 15, but not 10"
fi
Este script introduz operadores de comparação numérica:
-lt: menor que (less than)-eq: igual a (equal to)-gt: maior que (greater than)
Existem outros que você também pode usar:
-le: menor ou igual a (less than or equal to)-ge: maior ou igual a (greater than or equal to)-ne: diferente de (not equal to)
Note que usamos esses operadores especiais em vez de símbolos como < ou >. Isso ocorre porque, no Bash, < e > são usados para redirecionamento de entrada/saída, não para comparação numérica.
Agora, vamos tornar o script executável e executá-lo:
chmod +x numeric.sh
./numeric.sh
Você deve ver a saída: The number is exactly 10
Tente alterar a variável NUMBER para valores diferentes e execute o script novamente. Veja como a saída muda com base no valor que você definiu.
Por exemplo, se você mudar NUMBER para 20, deverá obter "The number is greater than 15". Se mudar para 7, deverá obter "The number is between 5 and 15, but not 10".
Comparações de Strings e Operadores Lógicos
Por fim, vamos explorar as comparações de strings e os operadores lógicos. Crie um novo arquivo chamado string_logic.sh:
touch string_logic.sh
Abra o string_logic.sh no WebIDE e adicione o seguinte conteúdo:
#!/bin/bash
STRING1="hello"
STRING2="world"
NUMBER1=5
NUMBER2=10
if [ "$STRING1" = "hello" ] && [ "$STRING2" = "world" ]; then
echo "Both strings match"
fi
if [ $NUMBER1 -lt 10 ] || [ $NUMBER2 -gt 5 ]; then
echo "At least one of the number conditions is true"
fi
if [[ "$STRING1" != "$STRING2" ]]; then
echo "The strings are different"
fi
if [[ -z "$STRING3" ]]; then
echo "STRING3 is empty or not set"
fi
Este script demonstra vários conceitos novos:
- Comparação de igualdade de strings (
=): Verifica se duas strings são exatamente iguais. - AND Lógico (
&&): Este operador permite combinar duas condições. Ambas as condições devem ser verdadeiras para que a expressão final seja verdadeira. - OR Lógico (
||): Este operador também combina duas condições, mas apenas uma precisa ser verdadeira para que a expressão final seja verdadeira. - Comparação de desigualdade de strings (
!=): Verifica se duas strings são diferentes. - Verificação de string vazia (
-z): É verdadeiro se a string estiver vazia (tiver comprimento zero).
Além disso, observe o uso de colchetes duplos [[ ]] em algumas das instruções if. Eles são uma versão aprimorada dos colchetes simples e são preferidos em scripts Bash sempre que possível. Eles permitem expressões mais complexas e apresentam menos comportamentos inesperados em relação à divisão de palavras e expansão de caminhos de arquivos.
Torne o script executável e execute-o:
chmod +x string_logic.sh
./string_logic.sh
Você deve ver todas as quatro instruções echo impressas, pois todas as condições no script são verdadeiras.
Both strings match
At least one of the number conditions is true
The strings are different
STRING3 is empty or not set
Tente alterar alguns dos valores (como definir STRING1 para algo diferente de "hello") e veja como isso afeta a saída.
Resumo
Neste laboratório, você aprendeu a utilizar estruturas condicionais na programação shell. Você praticou o uso de instruções if-else, cláusulas elif, comparações numéricas, comparações de strings e operadores lógicos. Essas ferramentas permitem criar scripts shell mais complexos e baseados em tomada de decisão.
Principais aprendizados:
- A estrutura básica das instruções if-else em scripts shell.
- Como usar elif para lidar com múltiplas condições.
- Operadores de comparação numérica (-lt, -gt, -eq, etc.).
- Comparação de strings e operadores lógicos.
- A importância de tornar os scripts executáveis com o comando chmod.
Lembre-se, a prática é fundamental para se tornar proficiente em shell scripting. Tente criar seus próprios scripts utilizando esses conceitos de diferentes maneiras. À medida que você avançar, verá que essas estruturas condicionais são essenciais para criar scripts mais sofisticados e úteis.



