Usar &&
operador,
cmd1 && cmd2 && cmd3
En shellscripting, &&
y los ||
operadores se modelan después de la implementación optimizada de operadores lógicos en C. &&
significa operador AND, y ||
significa OR. Unix está estrechamente relacionado con C, y en C, el segundo operando de operadores lógicos no se evalúa si el resultado ya se conoce del primer operando. Por ejemplo, "false && x"
es false
para cualquier x
, por lo que no hay necesidad de evaluar x
(especialmente si se x
trata de una llamada de función); igualmente para "true || x"
. Esto también se llama semántica de cortocircuito .
Y en Unix, es tradicional interpretar los valores de retorno de los comandos como valores de verdad de "finalización exitosa": el código de salida 0 significa true
(éxito), no cero significa false
(falla). Entonces, cuando el primer comando en cmd1 && cmd2
retorna "false"
(estado de salida distinto de cero, que indica falla), se conoce el estado del comando compuesto: falla. Entonces, la interpretación general de cmd1 && cmd2
puede ser: "ejecutar cmd1
, Y ENTONCES, si no falla cmd2
". Que es lo que básicamente quieres en tu pregunta.
De manera similar con OR: cmd1 || cmd2
puede interpretarse como "ejecutar cmd1
, O SI falla cmd2
".
Protip: para cadenas más largas de &&
, considere poner set -e
en su script. Básicamente cambia el punto ;
y coma en &&
, con un par de casos especiales.