Palavras-chave: shell, condicional, if, operadores, and, or
Para condicionais simples, que não precisem do else você pode usar os operadores && (and) e || (or) ao invés da estrutura if/then/fi.
if [ $var -ne 1 ]; then echo "Não é 1" fi if ! test -w $file; then echo "$file não é gravável" fi
Agora os mesmos comandos usando os operadores. Veja como a sintaxe fica mais simples e clara:
[ $var -ne 1 ] && echo "Não é 1" test -w $file || echo "$file não é gravável"
Se precisar de mais de um comando após o teste, faça um bloco com as chaves:
test -w $file || { echo "$file não é gravável"; exit 1; }







7 comentários
Feed de comentários deste artigo
4 outubro 2006 às 9:51
Eduardo Habkost
Eu gosto de usar set -e nos meus scripts. Nesse caso, usar && e || faz com que o script aborte caso a condição seja falsa.
Assim, eu costumo usar sempre if..then..fi, porque não abro mão do set -e, e não gostaria de usar algo como a && b || :.
O que me aconselha?
4 outubro 2006 às 15:00
Osvaldo Santana Neto
Eu não conhecia o ‘set -e’, acho que essa opção deveria se transformar em uma outra dica sobre shell *e* citar que ela impede que essa dica do Aurélio funcione…
18 dezembro 2006 às 8:51
eljunior
usando set -e, o shell não aborta se o comando que falhar estiver numa lista de && e ||.
pode usar tranquilamente os && e || usando set -e. :)
18 dezembro 2006 às 17:50
Eduardo Habkost
É verdade que no caso comum
&&e||funcionam. O que aconteceu comigo foi uma pegadinha. Veja o exemplo abaixo:$ cat a.sh
#!/bin/sh
set -e
faz_teste()
{
[ -r /tmp/naoexiste ] && echo existe
}
faz_teste
echo fim
E ao rodar o script:
$ ./a.sh
$
Nenhuma saída. Oops. :)
Então não posso usar tão tranquilamente, assim. Eu já caí nessa pegadinha, e foi o que me levou a achar que
&&e||não funcionavam comset -e.19 dezembro 2006 às 10:30
eljunior
o “echo fim” não executou porque o faz_teste retornou 1 como exit status (a funcao retorna o último exit status, neste caso, o exit status do “[ -r /tmp/naoexiste ]“.
o shell não abortou a execução por causa do “[ -r /tmp/naoexiste ]“, e sim por causa do “faz_teste”. para usar com segurança, você deve retornar o exit status em funções como essa. ;-)
19 dezembro 2006 às 19:25
Eduardo Habkost
Sim, essa a razão a pegadinha. Mas é uma diferença entre o
ife o&&, e o que tornou uma “pegadinha” para mim.Então, corrigindo: no meu primeiro comentário, onde está “quebra o
set -e“, leia-se “cuidado se usarset -e, pois&&não é exatamente igual aoif“.3 novembro 2009 às 9:01
[CC] If em 1 linha (shell script) « Blog do Daniel Bauermann
[...] este não seja o link mais específico para meu caso, mas foi o primeiro que encontrei e solucinou-me o problema. Além [...]