Este artigo faz parte do projeto #LTCode
A shell usa as mesmas construções para controle de fluxo que linguagens de programação de alto nível. Exemplo de uso de if else:
O que o comando if faz é avaliar o comando especificado verificando seu status de saída. No exemplo da foto acima foi executado em linha de comando, portanto você pode usar o comando !-2 quando quiser repetir o penúltimo comando. Altere o valor de 2 para repetir comandos mais antigos.
Todo comando retorna para a shell um valor (de 0 a 255) indicando sucesso (0) ou falha em sua execução (diferente de 0). Existem dois comandos internos da shell extremamente simples que apenas terminam com status 0 ou 1.
O comando true sempre executa com sucesso retornando 0 e o comando false sempre executa sem sucesso retornando 1.
O comando mais frequentemente usado com comandos condicionais é o test, pois faz uma variedade de verificações/comparações. Como ilustra a imagem acima o comando possui duas formas equivalentes test ou [ ]. A expressão é avaliada em verdadeiro ou falso, retornando 0 quando a expressão é verdadeira e 1 quando é falsa.
O comando test é capaz de avaliar expressões com arquivos, strings e inteiros. Abaixo está listado as expressões que você pode utilizar entre [ ] para serem avaliadas:
Expressões com arquivos:
Se true file1 e file2 possuem mesmo número de inode (hardlink).
Se true file1 é mais novo que file2.
Se true file1 é mais velho que file2.
Se true arquivo existe e é um arquivo/dispositivo de bloco-especial.
Se true arquivo existe e é um arquivo/dispositivo de caractere-especial.
Se true arquivo existe e é um diretório.
Se true arquivo existe arquivo existe.
Se true arquivo existe e é um arquivo regular.
Se true arquivo existe e é setgid.
Se true arquivo existe e pertence ao ID do grupo efetivo.
Se true arquivo existe e tem o stick bit definido.
Se true arquivo existe e é um link simbólico.
Se true arquivo existe e pertence ao ID do usuário efetivo.
Se true arquivo existe e é um pipe nomeado.
Se true arquivo existe e é legível pelo usuário efetivo.
Se true arquivo existe e tem tamanho maior que zero.
Se true arquivo existe e é socket de rede.
É um descritor de arquivos redirecionado de/para o terminal.
Se true arquivo existe é setuid.
Se true arquivo existe e é gravável pelo usuário efetivo.
Se true arquivo existe e é executável pelo usuário efetivo.
Expressões com strings:
Se true a string está definida, não é null.
Se true o tamanho da string é maior que zero.
Se true o tamanho da string é zero.
Se true string1 e string2 são iguais.
Se true string1 e string2 são iguais.
Se true string1 e string2 não são iguais.
Se true string1 vem depois de string2 se ordenadas.
Se true string1 vem antes de string2 se ordenadas.
Expressões com inteiros:
Se true integer1 é igual a integer2.
Se true integer1 é diferente de integer2.
Se true integer1 é menor ou igual a integer2.
Se true integer1 é menor que integer2.
Se true integer1 é maior ou igual a integer2.
Se true integer1 é maior que integer2.
Versões recentes do bash adicionam um comando composto que age como um aprimoramento do comando test.
O comando [[ ]] é muito similar ao comando test (suporta todas as suas expressões), mas adiciona uma nova comparação de strings.
retorna verdadeiro se string1 casa com a expressão regular estendida regex.
Outra funcionalidade do comando [[ ]] é que o operador == suporta o casamento de padrões da mesma forma que expansão de arquivos.
O bash também proporciona o comando composto (( )) que é útil para realizar operações inteiras, suporta o conjunto completo para avaliações aritméticas. Esse comando é útil para fazer testes verdade aritméticas, resultando em verdadeiro se a avaliação aritmética for não-zero.
Também é possível combinar expressões para criar avaliações mais complexas usando operadores lógicos. Existem três operadores lógicos (AND, OR e NOT) para os comandos test, [[ ]] e (( )). Cada um têm sintaxe diferenciada:
Operação: AND
test e [ ]: -a
[[]] e (()): &&
Operação: OR
test e [ ]: -o
[[]] e (()): ||
Operação: NOT
test e [ ]: -a
[[]] e (()): &&
Para negar uma combinação de expressões, deve-se usar parênteses envolvendo as expressões.
Bash provê dois operadores que podem realizar desvios.
comando1 && comando2
&& (AND): o comando2 só é executado se o comando1 executar com sucesso (status de saída igual a zero).
comando1 || comando2
|| (OR): o comando2 só é executado se o comando1 executar sem sucesso (status de saída diferente de zero).
Leave a Reply