Usando o IF no Shell
O Comando IF é utilizado para verificar condições. "IF" pode ser traduzido como "SE", no dia-a-dia usamos o "IF" sem notarmos.
Exemplo: Você vai amanhã a casa da sua avó? SE não estiver chovendo eu vou.
No Shell Script o IF é usado da seguinte forma:
if (( condição a ser analizada ))
then
Comando executado se a condição for verdadeira
if
Opções para IF |
|
== |
Igual |
!= |
Diferente |
<= |
Menor ou Igual |
< |
Menor |
>= |
Maior ou Igual |
> |
Maior |
Exemplo:
exemplo_if.sh |
if (( 5 > 4 )) then echo "5 é maior que 4" fi |
Mostrará na tela |
5 é maior que 4 |
O Shell Script possui o comando "test", com ele pode-se testar se um arquivo existe, se uma pasta existe, entre outras coisas. Pode-se utilizar o comando "test" da seguinte forma:
if teste condição a ser analizada
then
Comando executado se a condição for verdadeira
fi
Por exemplo:
if_test.sh |
if test 5 -gt 4 then echo "5 é maior que 4" fi |
Essa forma de usar o test é meio complicada, por isso existe uma forma mais bonita para usá-lo. Basta usar '[' e ']'. Veja:
if_test2.sh |
if [ 5 -gt 4 ] then echo "5 é maior que 4" fi |
Tudo que está entre '[' e ']' é testado pelo test. "-gt" significa "GreaterThan" (maior que). Logo SE 5 for maior que 4 aparecerá na tela "5 é maior que 4".
Opções para o Comando test |
|
-lt |
LessThan ( Menor que ) |
-le |
Less or Equal ( Menor ou Igual a ) |
-gt |
GreaterThan ( Maior que ) |
-ge |
Greater or Equal ( Maior ou igual a ) |
-eq |
Equal ( Igual a ) |
-ne |
Not Equal ( Diferente de ) |
Aplicação Prática:
Imagine que você tenha um script que computador faça cálculos. Como sabemos, não se pode fazer divisão por 0. Então o ideal é ter uma condição para verificar se o valor é diferente de zero antes de executar a operação.
nao_divide_por_zero.sh |
x=5; if [ $x -ne 0 ] then echo "10 / $x é igual a $((10/$x))" fi |
Inicialmente informei que X vale 5, o script verificar de X é diferente de 0 (-ne significa "NotEqual" ou "Não Igual" ). Se X for diferente de 0, então ele executa a ação dentro do if.
O ELSE e o ELIF são complementos para o IF. ELSE pode ser traduzido por "SENÃO".
Exemplo: SE chover fico em casa, SENÃO vou a praia
ELIF é abreviação para ELSE IF, que pode ser traduzido por "SENÃO SE".
Exemplo: SE chover fico em casa, SE NÃO chover e SE fizer calor, vou a sorveteria
Um código como Exemplo para ELSE:
exemplo_else.sh |
lado="6" if [ $lado -gt "7" ] then echo "Lado é Maior que Sete" else echo "Lado é Menor ou Igual a Sete" fi |
Mostrará na tela |
Lado é Menor ou Igual a Sete |
Um código como Exemplo para ELIF:
exemplo_elif.sh |
lado="6" if [ $lado -gt "7" ] then echo "Lado é Maior que Sete" elif [ $lado -lt "7" ] then echo "Lado é Menor que Sete" else echo "Lado é Igual a Sete" fi |
Mostrará na tela |
Lado é Menor que Sete |
Atenção!
Repare que após definir a condição para ELIF deve-se usar o termo THEN. Mas ao usar o ELSE, o termo THEN não é utilizado. "Não Confunda Alhos com Bugalhos!"
Você deve estar se perguntando qual a utilidade do ELIF, já que você poderia criar mais uma condição IF e ter o mesmo resultado. Pensando um pouco você percebe que o ELIF torna o script mais curto, mesmo que o script funcione igualmente pras duas formas. Mas em alguns casos o ELIF é muito importante, e simplificará muito mais seu script. Veja os scripts abaixo, o primeiro faz a mesma coisa que o anterior, mas usando 3 IFs e o outro mostra muito mais a importância do ELIF.
3ifs.sh |
lado="6" if [ $lado -gt "7" ] then echo "Lado é Maior que Sete" fi if [ $lado -lt "7" ] then echo "Lado é Menor que Sete" fi if [ $lado -eq "7" ] then echo "Lado é Igual a Sete" fi |
Mostrará na tela |
Lado é Menor que Sete |
O script ficou um pouco maior, mas ainda mostra o resultado corretamente. Agora veja esse script:
if_com_defeito.sh |
x="3" if [ $x -le "3" ] then echo "X é menor ou igual a 3" fi if [ $x -le "7" ] then echo "X é maior que 3 e menor ou igual a 7" else echo "X é maior que 7" fi |
Mostrará na tela |
X é menor ou igual a 3 X é maior que 3 e menor ou igual a 7 |
Você pode ver que uma das afirmações não é verdadeira. X não é maior que 3, como informou o script. Por que isso acontece? Porque o ELIF só é executado quando nenhuma condição IF anterior tiver sido satisfeita. Vou mostrar como seria a maneira de se utilizar 2 IFs nesse caso, só para ver como é muito mais complicado.
if_corrigido.sh |
x="3" if [ $x -le "3" ] then echo "X é menor ou igual a 3" fi if [[ $x -gt "3" && $x -le "7" ]] then echo "X é maior que 3 e menor ou igual a 7" fi if [[ $x -gt "7" ]] then echo "X é maior que 7" fi |
Atenção!
Quando se usa o "ELIF" e o "ELSE" dentro do "IF", as condições sempre são executadas na sequência em que aparecem. Assim que uma condição é satisfeita, o script, executa a ação correspondente a essa condição e em seguida pára de verificar as condições. Nesse caso, mesmo que MAIS de uma condição seja verdadeira ela não será executada. Veja:
exemplo_if.sh |
x="3" if [ $x -le "8" ] then echo "X é menor ou igual a 3" elif [ $x -le "10" ] then echo "X é menor ou igual a 10" elif [ $x -le "20" ] then echo "X é menor ou igual a 20" fi |
Mostrará na tela |
X é menor ou igual a 3 |
Isso acontece porque o script verifica se a condição IF é verdadeira. Como ela é verdadeira, o script executa a ação dentro do IF e pára de verificar as outras condições.