Este tutorial apresenta o uso de instruções if do Bash com múltiplas condições para aprimorar suas habilidades em shell scripting. Você aprenderá como combinar operadores lógicos de forma eficaz, permitindo que você construa scripts que tomam decisões inteligentes com base em vários critérios. Ao final deste laboratório, você estará equipado para criar ferramentas de automação versáteis para tarefas cotidianas.
Compreendendo os Fundamentos das Instruções if do Bash
Vamos começar com o básico. No Bash, a instrução if ajuda seu script a decidir o que fazer com base em se uma condição é verdadeira ou falsa. Isso é especialmente útil quando você precisa automatizar tarefas em seu sistema Ubuntu.
Abra seu terminal no diretório padrão, /home/labex/project. Você escreverá todos os seus scripts aqui. Para começar, crie um arquivo de script simples chamado basic_if.sh digitando:
touch basic_if.sh
Adicione o seguinte código para verificar se um arquivo existe:
#!/bin/bash
if [[ -f "testfile.txt" ]]; then
echo "The file exists."
else
echo "The file does not exist."
fi
Este script usa [[ -f "testfile.txt" ]] para testar se testfile.txt existe no seu diretório atual. O comando echo exibirá uma mensagem dependendo do resultado.
Para executar o script, torne-o executável:
chmod +x basic_if.sh
Em seguida, execute-o:
./basic_if.sh
Como testfile.txt ainda não existe, você verá "The file does not exist." Vamos criar o arquivo para ver o outro resultado:
touch testfile.txt
Execute o script novamente:
./basic_if.sh
Agora, ele deve exibir "The file exists." Esta etapa apresenta a estrutura básica: if, then, else e fi. Os colchetes duplos [[ ]] são um recurso moderno do Bash, tornando o teste de condição mais confiável do que colchetes simples.
Adicionando Múltiplas Condições com AND (&&)
Agora, vamos tornar sua instrução if mais inteligente, verificando múltiplas condições de uma vez. Você usará o operador && (AND), que exige que todas as condições sejam verdadeiras para que o bloco then seja executado.
Abra basic_if.sh novamente e substitua seu conteúdo por este script atualizado:
#!/bin/bash
if [[ -f "testfile.txt" ]] && [[ -r "testfile.txt" ]]; then
echo "The file exists and is readable."
else
echo "The file is either missing or not readable."
fi
Este script verifica duas coisas: se testfile.txt existe (-f) e se é legível (-r). Ambos devem ser verdadeiros para que a primeira mensagem apareça.
Execute o script:
./basic_if.sh
Como você criou testfile.txt na Etapa 1 e ele é legível por padrão (já que labex é o proprietário), você verá "The file exists and is readable." Para entender como && funciona, vamos testar o cenário oposto. Altere as permissões do arquivo para torná-lo ilegível:
chmod u-r testfile.txt
Execute o script novamente:
./basic_if.sh
Agora, ele exibe "The file is either missing or not readable" porque a segunda condição (-r) falha. Restaure a legibilidade para as próximas etapas:
chmod u+r testfile.txt
O operador && garante que cada condição deve ser aprovada – perfeito para situações em que múltiplos critérios importam.
Usando OR (||) para Condições Flexíveis
Em seguida, você explorará o operador || (OR), que permite que o bloco then seja executado se pelo menos uma condição for verdadeira. Isso é útil quando você deseja flexibilidade em suas verificações.
Abra basic_if.sh novamente. Atualize-o com este código:
#!/bin/bash
if [[ -f "testfile.txt" ]] || [[ -f "backup.txt" ]]; then
echo "At least one file exists."
else
echo "Neither file exists."
fi
Este script verifica se testfile.txt ou backup.txt existe. Como testfile.txt já está em seu diretório, execute-o:
./basic_if.sh
Você verá "At least one file exists." Agora, remova testfile.txt para testar a lógica ||:
rm testfile.txt
Execute o script novamente:
./basic_if.sh
Ele exibe "Neither file exists" porque nenhum dos arquivos está presente. Crie backup.txt para ver a condição OR ter sucesso:
touch backup.txt
./basic_if.sh
Agora, ele diz "At least one file exists" novamente. O operador || é ótimo quando qualquer uma das condições sendo verdadeira é suficiente.
Combinando os Operadores AND e OR
Vamos combinar && e || para uma lógica mais complexa. Você verificará se um arquivo existe e atende a critérios específicos, com uma condição de fallback.
Abra basic_if.sh novamente. Atualize-o com este código:
#!/bin/bash
if [[ -f "testfile.txt" ]] && [[ -r "testfile.txt" ]] || [[ -f "backup.txt" ]]; then
echo "Either testfile.txt is readable or backup.txt exists."
else
echo "No suitable file found."
fi
Este script verifica se testfile.txt existe e é legível, ou se backup.txt existe. Recrie testfile.txt:
touch testfile.txt
Execute o script:
./basic_if.sh
Ele exibe "Either testfile.txt is readable or backup.txt exists" porque testfile.txt atende a ambas as condições. Remova testfile.txt e mantenha backup.txt:
rm testfile.txt
./basic_if.sh
A mesma mensagem aparece porque backup.txt satisfaz a condição ||. Remova backup.txt também:
rm backup.txt
./basic_if.sh
Agora, ele diz "No suitable file found." Esta etapa mostra como misturar operadores para decisões diferenciadas.
Aplicando Condições a uma Tarefa Prática
Finalmente, vamos usar o que você aprendeu em um cenário do mundo real: validar a entrada do usuário. Você escreverá um script para verificar se um número está dentro de um intervalo.
Crie um novo script chamado number_check.sh:
touch number_check.sh
chmod +x number_check.sh
Adicione este código:
#!/bin/bash
read -p "Enter a number between 1 and 10: " number
if [[ "$number" -ge 1 ]] && [[ "$number" -le 10 ]]; then
echo "Valid number: $number"
else
echo "Invalid number. Please enter a value between 1 and 10."
fi
Este script solicita que você insira um número e, em seguida, usa && para garantir que ele esteja entre 1 e 10 (inclusive). Execute-o:
./number_check.sh
Digite 5 e pressione Enter. Você verá "Valid number: 5". Execute-o novamente e insira 15. Ele responde com "Invalid number. Please enter a value between 1 and 10." Esta é uma maneira prática de lidar com a entrada do usuário, garantindo que seu script prossiga apenas com dados válidos.
Resumo
Neste laboratório, você dominou as instruções if do Bash com múltiplas condições usando os operadores && e ||. De verificar as propriedades dos arquivos à validação da entrada do usuário, você construiu scripts que tomam decisões com base em critérios complexos. Essas habilidades permitem que você crie ferramentas de automação confiáveis, adaptadas a várias necessidades em seu sistema Ubuntu.