Cassic

Usando o IF no Shell

Autor: Bruno Lopes


  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.