Use &&
operator,
cmd1 && cmd2 && cmd3
Em shellscripting, os operadores &&
e ||
são modelados após a implementação otimizada dos operadores lógicos em C. &&
significa operador AND e ||
significa OR. Unix está estreitamente relacionado a C, e em C, o segundo operando de operadores lógicos não é avaliado se o resultado já é conhecido do primeiro operando. Por exemplo. "false && x"
é false
para qualquer x
, portanto, não há necessidade de avaliar x
(especialmente se x
for alguma expressão booleana complexa); similarmente para "true || x"
. Isso também é chamado de semântica de curto-circuito .
E no Unix, é tradicional interpretar os valores de retorno dos comandos como valores verdadeiros de "conclusão bem-sucedida": código de saída 0 significa true
(sucesso), diferente de zero significa false
(falha). Portanto, quando o primeiro comando em cmd1 && cmd2
retorna "false"
(status de saída diferente de zero, que indica falha), o status do comando composto é conhecido: falha. Portanto, a interpretação geral de cmd1 && cmd2
pode ser: "execute cmd1
, E ENTÃO, se não falhar, cmd2
". O que você basicamente quer em sua pergunta.
Da mesma forma com OR: cmd1 || cmd2
pode ser interpretado como "execute cmd1
, OU SE falhar, cmd2
".
Protip: para cadeias mais longas de &&
, considere colocar set -e
em seu script. Ele basicamente altera o ponto-e-vírgula ;
para &&
, com alguns casos especiais.