if-then-else e afins

A estrutura básica é a seguinte:

if <expressão>; then
  <instrução(ões) se expressão retornar verdadeiro>
else
  <instrução(ões) se expressão retornar falso>
fi

Primeiro devemos saber que todos os comandos do UNIX possuem um código de retorno. Este código tem valor 0 quando a operação ocorre com sucesso e valor diferente de zero quando a operação NÃO termina com sucesso. Após cada comando o valor de retorno é gravado na variável $?, experimente um "echo $?" depois de algum comando e veja!

A avaliação de verdadeiro do bash é exatamente o oposto de outras linguagens de programação (C por exemplo), que avaliam a expressão de retorno diferente de 0 como verdadeira e 0 como falso. No bash, quando um comando retorna 0 o if avalia como verdadeiro e quando retorna um não-zero significa falso. (Para mais detalhes sobre os códigos de retorno, olhe a página manual do bash na seção "EXIT STATUS").

Veja um exemplo:

#!/bin/bash
# return.sh

read -p "Entre com o nome do diretório: " DIR
if ( cd $DIR 2> /dev/null ); then
        echo -e "'cd $DIR' retornou \"sucesso\" ($?)"
else
        echo -e "'cd $DIR' retornou \"insucesso\" ($?)"
fi

meleu:~$ ./return.sh
Entre com o nome do diretório: /usr
'cd /usr' retornou "sucesso" (0)

meleu:~$ ./return.sh
Entre com o nome do diretório: dir_invalido
'cd dir_invalido' retornou "insucesso" (1)

O valor de retorno do comando cd /usr foi 0 portanto foi executado com sucesso, já o retorno de cd /dir_invalido foi 1 porque ocorreu um erro. Agora repare no final que mesmo com um cd /usr continuo no diretório HOME (~). Isto prova que um shell script usa um shell a parte (shell "filho") e não o shell que chama o script (shell pai). (Chato ficar lendo isso toda hora né? Esta foi a última vez! :P)

results matching ""

    No results matching ""