Shell Script – Estrutura condicional

Dando continuidade aos posts de Shell Script, agora iremos falar sobre Estrutura Condicional, para quem já desenvolve não é nenhuma novidade, já para quem não esta tão habituado com o termo seria os if e else das linguagens de  ou ainda melhor é onde você irá “testar” uma condição e o script ou programa irá dizer se aquela condição é verdadeira ou falsa, 1 ou 0, true ou false  enfim ae depende do que você quer fazer.

Em Shell script declaramos a estrutura de seguinte maneira:

ou

Ok, é simples não é? Porém diversas combinações podem ser feitas usando variáveis, test ou [] e lógicas tornando um script simples ou complexo porém poderoso, vamos ao primeiro exemplo no caso ifelseEx1.sh:

Muito simples, usando apenas $1 como sendo um parâmetro informado a frente no nome do script na chamada, e a estrutura de if, elif e else. Onde a ideia é analisar o que foi passado e definir se foi passado o caminho de um diretório, arquivo ou uma string.

Saída:

No script podemos ver que o test ou o que estiver entre [ ] irá checar a condição, então usamos -d que verifica se é um diretório, -f que verifica se é um arquivo, caso não seja nenhum dos dois descartamos dizendo que foi apenas uma string que foi passada, é claro que isso poderia ser bem mais aperfeiçoado.
Agora vamos a outro exemplo, desta vez criaremos dois arquivos, arquivo1.txt sem nada e o arquivo2.txt com a frase “Que calor é esse!” (hehe). E vamos fazer mais alguns testes agora no script ifelseEx2.sh:

Saída:

Vamos analisar agora, desta vez usei as opções -e que verifica se o que foi passado existe, no caso verifica se o arquivo existe, porém eu utilizei um ! antes, isso é negação (não) então seria se o arquivo não existe e ele exibe Arquivo não existe na tela, depois temos outra condição e logica com -f que vimos vê se se é um arquivo, -s ele verifica se o arquivo é maior que zero (tamanho) e o -a é para a logica AND (E), então a logica seria a seguinte:

[ -f $PARAM1 -a -s $PARAM1 ]
Se é um arquivo E se o arquivo é maior que zero.

Agora um outro exemplo um pouco mais complexo mas bem comentado para facilitar ifelseEx3.sh

Saída:

Acho que não preciso comentar muito, pois inseri comentários no código mas como vimos é possível eu checar as permissões (leitura,gravação e execução) de arquivos e diretórios, então eu fiz uma brincadeira para verificar dois arquivos passados dizer qual é mais antigo, pegar o mais novo e mostrar na tela as permissões para o usuário corrente.
Um ultimo script, agora usando o test e [ ] em um mesmo script e mais alguns parâmetros interessantes, ifelseEx4.sh.

Neste ultimo script fiz uso de recursos do post anterior Shell Script: Variáveis, no começo sem grandes novidade criei algumas variáveis com alguns dados, logo em seguida duas variáveis $NUM1 e $NUM2 que irão gerar e armazenar dois números randômicos, mostro na tela e faço uma comparação onde -ge verifica se o primeiro dado é maior ou igual ao segundo e informa o operador.
Agora começa a ficar legal, o comando which irá pegar o caminho do binário mkdir e armazenar em $MKDIR, logo abaixo eu uso o test onde ele verifica se o $MKDIR possui permissão de execução se tiver maravilha ele continua caso contrario || irá sair do nosso script ignorando o que tiver abaixo.
Se estiver ok, uma nova variável chamada $MAKE_DIR sera criado com o conteúdo do caminho /bin/mkdir mais alguns parâmetros para criar diretórios, no caso em -m passo a permissão de criação baseada na variável no topo do script, e logo em seguida chama $MAKE_DIR e passa a variável $NAME, $NUM1 e $NUM2 para a criação do diretório, após executar um if vem logo em seguida com o $? para verificar o status do comando anterior de bem sucedido ou igual a 0 ele exibe uma mensagem na tela de exite e lista os diretórios criados caso contrario irá exibir uma mensagem que ouve um erro na execução do comando.

Saída:

Vamos alterar a linha test -x $MKDIR || exit 0 para test -d $MKDIR || exit 0 e ver o que acontece.

No caso ele tem que verificar se é um diretório, como mkdir não é e sim um binário ele irá gerar uma exceção e sair do programa.
Ficou extenso este post porém detalhei bem os passos para nos próximos posts consiga focar mais em scripts com estas características sem ter que abordá-las, uma tabela com as opções para test e [ ] pode ser visualizada abaixo:

Operadores para números
-lt Verifica se é menor
-gt Verifica se é maior
-le Verifica se é menor ou igual
-ge Verifica se é maior ou igual
-eq Verifica se é igual
-ne Verifica se é diferente
Operadores para Texto Usa-se ” ” caso utilizar valor
-n Verifica se não é nula
-z Verifica se é nula
!= Verifica se é diferente
= Verifica se é igual
Operador para logica
! Logica NOT ou NÃO
-o Logica OU, (OR) ou ||
-a Logica E, (AND) ou &&
Operador para arquivos/diretórios
-d Verifica se é diretório
-f Verifica se é arquivo
-e Verifica se existe
-O Verifica se o dono do arquivo é o usuário que esta executando
-s Verifica se o arquivo não esta vazio
-L Verifica se é um link-simbólico
-r Verifica se o usuário tem permissão de leitura
-w Verifica se o usuário tem permissão de gravação
-x Verifica se o usuário tem permissão de execução
-nt Verifica se é mais recente
-ot Verifica se é mais antigo
-ef Verifica se é igual

Utilizamos varias delas e outras foram adicionadas, e existem mais algumas mas no momento certo será abordado.

Até a próxima!

Share Button

CC BY-NC-SA 4.0 Shell Script – Estrutura condicional by Cleiton Bueno is licensed under a Creative Commons Attribution-NonCommercial-ShareAlike 4.0 International License.