Você está na página 1de 9

comandos_condicionais

Comandos condicionais

If , elif (se) e else (seno) Os comandos if e elif que no portugus significa (se), so utilizados para verificar um bloco de comandos em um cdigo e executar comandos dentro de uma expresso if ou elif seguido do complemento then (ento) , caso seja verdadeira, e caso seja falso, executa comandos dentro de uma expresso else (seno), caso exista como mostra a sintaxe abaixo:

Sintaxe:

if [ expresso1 ] then comandos 1 elif [ expresso2 ] then comandos 2 else comandos 3 fi Os comandos if, elif e test que veremos a seguir, aceitam os seguintes operadores utilizados pelo shell:

Operador / arquivo ou diretrio -b (arquivo) -c (arquivo) -d (diretrio) -e (arquivo ou diretrio)

Descrio Verifica se o arquivo um dispositivo de bloco Verifica se o arquivo um dispositivo de caractere Verifica se um diretrio Verifica se o arquivo ou diretrio existe

comandos_condicionais

-f (arquivo) -g (arquivo ou diretrio) -u (arquivo ou diretrio) -k (arquivo ou diretrio) -L (arquivo ou diretrio) -p (arquivo) -S (arquivo) -s (arquivo ou diretrio) -r (arquivo ou diretrio) -w (arquivo ou diretrio) -x (arquivo ou diretrio)

Verifica se o arquivo um arquivo comum Verifica o set group id (SGID) do arquivo ou diretrio (Gerenciamento de usurios e grupos) Verifica o set user id (SUID) do arquivo ou diretrio (Gerenciamento de usurios e grupos) Verifica o bit sticky ligado do arquivo ou diretrio(Gerenciamento de usurios e grupos) Verifica se o arquivo ou diretrio um arquivo com link simblico Verifica se o arquivo um arquivo de pipe Verifica se o arquivo um arquivo de sockete Verifica se o arquivo ou diretrio tem o tamanho maior que zero Verifica se o arquivo ou diretrio tem permisses de leitura Verifica se o arquivo ou diretrio tem permisses de gravao Verifica se o arquivo ou diretrio tem permisses de execuo

-O (arquivo) -G (arquivo)

Verifica o proprietrio do EUID corrente do arquivo. (Gerenciamento de processos) Verifica o proprietrio do EGID corrente do arquivo. (Gerenciamento de processos)

Exemplo 1: O exemplo abaixo verifica se o arquivo e o diretrio existe ou no


#!/bin/bash arquivo="/etc/passwd" if [ -f $arquivo ] then echo "o arquivo $arquivo existe" else echo "o arquivo $arquivo no existe" fi

Exemplo 2: O exemplo abaixo verifica se o arquivo tem permisses de escrita ou no

comandos_condicionais

#!/bin/bash arquivo="/etc/passwd" if [ -w $arquivo ] then echo "este arquivo possui permisses de escrita" else echo "este usurio no tem permisses para gravar no arquivo $arquivo" ls -l $arquivo fi

Exemplo 3: O exemplo abaixo verifica se o arquivo possui o SUID, GUID ou Bit Sticky ativados ou no
#!/bin/bash arquivo="/usr/bin/passwd" if [ -u $arquivo ] then echo "o arquivo $arquivo ls -l $arquivo elif [ -g $arquivo ] then echo "o arquivo $arquivo ls -l $arquivo elif [ -k $arquivo ] then echo "o arquivo $arquivo ls -l $arquivo else echo "o arquivo $arquivo ls -l $arquivo fi

pussui o SUID ativado"

pussui o GUID ativado"

pussui o bit sticky ativado"

no pussui o SUID, GUID e Bit Sticky ativados"

Arquivo / operador / arquivo -nt (arquivo1) (operador) (arquivo2) -ot (arquivo1) (operador) (arquivo2) -ef (arquivo1) (operador) (arquivo2)

Descrio Verifica se o arquivo1 mais novo que o arquivo2 Verifica se o arquivo1 mais velho que o arquivo2 Verifica se o arquivo1 link para o arquivo2

Exemplo 1: O exemplo abaixo verifica se o arquivo1 mais novo do que o arquivo2 ou no

comandos_condicionais

#!/bin/bash arquivo1="arquivo" arquivo2="/etc/passwd" touch arquivo

if [ $arquivo1 -nt $arquivo2 ] then echo "o $arquivo1 mais novo do que o $arquivo2" ls -l $arquivo1 ls -l $arquivo2 else echo "o $arquivo1 no mais novo do que o $arquivo2 ou no um link" ls -l $arquivo1 ls -l $arquivo2 fi

Exemplo 2: O exemplo abaixo verifica se o arquivo1 um link para o arquivo2 ou no


#!/bin/bash touch arquivo1.txt ln -s arquivo1.txt link1 arquivo1="arquivo1.txt" arquivo2="link1" if [ link -ef $arquivo1 ] then echo "o arquivo $arquivo2 um link para o arquivo $arquivo1" ls -l $arquivo2 else echo "o arquivo $arquivo2 no um link para o arquivo $arquivo1" ls -l $arquivo2 fi

Outras comparaes -z (string) -n (string) string1 = string2 string1!= string2

Descrio Verifica se uma string (texto) de tamanho zero ou vazia Verifica se uma string de tamanho maior que zero ou vazia Verifica se as duas strings so iguais Verifica se as duas strings so diferentes

comandos_condicionais

!expresso expresso1 -a expresso2 expresso1 -o expresso2 parmetro1 -eq parmetro2 parmetro1 -ne parmetro2 parmetro1 -lt parmetro2 parmetro1 -gt parmetro2 parmetro1 -ge parmetro2 parmetro1 -le parmetro2

Verifica se a expresso falsa Verifica a expresso1 e (AND) a expresso2 Verifica a expresso1 ou (OR) a expresso2 Verifica se o parmetro1 igual ao parmetro2 Verifica se o parmetro1 diferente do parmetro2 Verifica se o parmetro1 menor que o parmetro2 Verifica se o parmetro1 maior que o parmetro2 Verifica se o parmetro1 maior ou igual ao parmetro2 Verifica se o parmetro1 menor ou igual ao parmetro2

Exemplo 1: O exemplo abaixo verifica se a string digitada pelo usurio est vazia e se Debian
#!/bin/bash echo -n "Qual distribuio Linux voc est usando ? " read string if [ -z $string ] then echo "digite o nome da sua distro Linux" elif [ $string = "Debian" ] || [ $string = "debian" ] then echo "A sua distro Linux Debian" else echo "A sua distro Linux no Debian" fi

Exemplo 2: O exemplo abaixo verifica se o nmero digitado pelo usurio menor, igual ou maior que 10
#!/bin/bash echo -n "Digite um nmero " read numero if [ -z $numero ] then echo " necessrio digitar um nmero" elif [ $numero -lt 10 ] then echo "O nmero digitado $numero menor que 10" elif [ $numero -eq 10 ] then

comandos_condicionais

echo "O nmero digitado $numero igual a 10" elif [ $numero -gt 10 ] then echo "O nmero digitado $numero maior do que 10" fi

Exemplo 3: O exemplo abaixo usando a comparaa -a (AND), verifica se o nmero digitado pelo usurio maior ou igual a 5 e (AND) menor ou igual a 10.

#!/bin/bash echo -n "Digite um nmero " read numero if [ $numero -ge 5 -a $numero -le 10 ] then echo "O nmero digitado $numero maior ou igual a 5 e menor ou igual a 10" else echo "O nmero digitado $numero maior do que 10" fi

test (teste lgico) O comando test semelhante ao comando if, mas sem o comando condicional else, o comando test apenas verifica uma expresso usando a varivel especial $?, e caso seja verdadeira, retorna 0, caso seja falso, retorna um valor diferente de zero "0" que geralmente 1.

Outro detalhe que voc pode utilizar todos os operadores e comparaes utilizadas pelo comando if mostrado anteriormente, e mesclar o comando test com os comandos if e else como mostra os exemplos abaixo:

Sintaxe:

test [ expresso ] ou [ expresso ]

comandos_condicionais

Exemplo 1: O exemplo abaixo verifica se a string digitada pelo usurio a S (sim) ou N (no)
#!/bin/bash echo -n "Voc quer executar este script (S/N) ? " read letra test $letra = "S" echo "Sim: $?" test $letra = "N" echo "No: $?"

Exemplo 2: O exemplo abaixo verifica se a string digitada pelo usurio a distro Debian ou Ubuntu
#!/bin/bash echo -n "Qual distribuio Linux voc est usando Debian/Ubuntu ? " read string test $string = "Debian" saida1=`echo $?` if [ $saida1 -eq 0 ] then echo $? echo "A distro Debian" exit fi [ $string = "Ubuntu" ] saida2=`echo $?` if [ $saida2 -eq 0 ] then echo $? echo "A distro Ubuntu" exit fi

case (caso) O comando case semelhante ao comando if e executa comandos dentro da instruo case onde passado uma varivel como parmetro e comparado com um dos padres dentro da instruo case. Sintaxe:

comandos_condicionais

case variavel in padro1) comandos1;; padro2) comandos2;; *) comandos3;; esac

Exemplo: O exemplo abaixo armazena o parmetro digitado pelo usurio em uma varivel, e compara com os padres start) , stop) e restart), caso no seja informado nenhum dos nmeros exibe uma mensagem de erro.

#!/bin/bash echo -n "Digite um dos parmetros (start|stop|restart): " read variavel case $variavel in start) echo "voc digitou o parmetro: $variavel";; stop) echo "voc digitou o parmetro: $variavel";; restart) echo "voc digitou o parmetro: $variavel";; *) echo "Erro em $0, Digite um parmetro vlido (start|stop|restart)" exit ;; esac

select (selecione) O comando select usado para criar entradas padres que sero usadas como opes de escolha para cada opo. Sintaxe:

select variavel in valores do comandos done

comandos_condicionais

Exemplo: O exemplo abaixo cria uma lista de entradas padres, onde o usurio poder escolher uma das opes
#!/bin/bash select variavel in arquivo1 arquivo2 arquivo3 do echo $variavel done

Você também pode gostar