Aprende leyendo en orden

Encadenar comandos — ; && || y comillas

Aprende la ejecución secuencial con ;, la ejecución condicional con && (en caso de éxito) y || (en caso de fallo), y cómo difieren las comillas simples y dobles en la expansión de variables — todo práctico en una terminal del navegador.

Encadenar comandos — ; && ||

Puedes encadenar varios comandos en una sola línea.

; los ejecuta en orden sin importar el resultado del comando anterior.

&& ejecuta el siguiente comando solo cuando el anterior tuvo éxito, y || ejecuta el siguiente solo cuando el anterior falló.

SímboloEjecuta el siguiente cuandoEjemplo
;Siempre, sin importar el resultadoecho a ; echo b
&&Solo si el anterior tuvo éxito (estado de salida 0)mkdir d && cd d
||Solo si el anterior falló (distinto de cero)cat f || echo ng
En qué se diferencian ; && ||
echo A ; echo Bejecuta A y Bde todos modoscmd && echo okok solo si cmdtiene éxitocmd || echo ngng solo si cmdfalla
; siempre se ejecuta en secuencia, && ejecuta el siguiente en caso de éxito y || lo ejecuta en caso de fallo.
echo step1 ; echo step2          # ejecutar ambos en orden
mkdir build && echo created      # created si tiene éxito
ls missing.txt || echo not-found # not-found si falla

① Ejecuta echo first; echo second y confirma que ; imprime las dos salidas en orden.

② Ejecuta echo ok && echo done y confirma que && continúa con el siguiente cuando el anterior tiene éxito.

③ Ejecuta cat nofile.txt || echo missing y confirma que || ejecuta el lado derecho solo cuando el anterior falla. (Ejecútalo correctamente y aparecerá una explicación.)

Linux console
0 / 3 completado(s)
Loading Linux Terminal...

Combinar && y || — ramificar en línea

Puedes escribir && y || uno tras otro en una línea.

cmd && echo ok || echo ng ejecuta echo ok si cmd tiene éxito, y echo ng si falla.

Es la forma habitual cuando quieres escribir en un solo lugar tanto la acción de éxito como la de fallo.

Ramificar combinando && y ||
cmdramificar segúnel estado de salida&& echo okok si cmdtiene éxito|| echo ngng si el anteriorfalló
cmd && echo ok || echo ng imprime ok si cmd tiene éxito, o ng si falla.
mkdir out && echo created || echo failed   # created en caso de éxito
ls nofile.txt && echo found || echo none   # none en caso de fallo

① Ejecuta ls . && echo found || echo none y confirma que aparece found porque ls . tiene éxito.

② Ejecuta cat nofile.txt && echo found || echo none y confirma que aparece none porque cat falla.

③ Compara los dos resultados y observa cómo la parte tras && y la parte tras || se intercambian según el éxito o el fallo.

Linux console
0 / 2 completado(s)
Loading Linux Terminal...

En qué se diferencian las comillas — ' y "

Hay dos tipos de comillas para envolver una cadena.

Las comillas simples '...' tratan el contenido como caracteres literales y no reemplazan $VAR.

Las comillas dobles "..." expanden $VAR y $(...) dentro a sus valores.

También se usan para pasar como una sola unidad una cadena que contiene espacios.

Comillas$VAR$(...)Ejemplo → salida
'...' (simples)No se expande (literal)No se expandeecho '$name'$name
"..." (dobles)Se expande al valorSe expande a la salida del comandoecho "$name"Linux
Expansión: simples vs dobles
name=Linuxfijar name a Linuxecho '$name'imprime $nameliteralmenteecho "$name"se expande a Linux
Las comillas simples se quedan literales; las dobles expanden $variable a su valor.
place=server
echo 'path is $place'   # literal: path is $place
echo "path is $place"   # expandido: path is server

① Fija una variable con name=Linux.

② Ejecuta echo '$name' y confirma que las comillas simples imprimen $name literalmente.

③ Ejecuta echo "$name" y confirma que las comillas dobles lo expanden al valor Linux.

Linux console
0 / 3 completado(s)
Loading Linux Terminal...

Incrustar variables y salida de comandos en comillas dobles

Dentro de comillas dobles puedes construir una sola cadena a partir de variables y sustitución de comandos a la vez.

$(...) se reemplaza por la salida del comando.

Por ejemplo, $(pwd) se reemplaza por la ruta de tu ubicación actual antes de mostrarse.

Envolver en comillas dobles es también la forma básica de pasar como un único argumento un valor que contiene espacios.

① Fija una variable con user=guest.

② Ejecuta echo "hello $user" && echo done y confirma que la variable se expande dentro de las comillas dobles y done sigue en caso de éxito.

③ Ejecuta echo "now: $(pwd)" y confirma que el $(...) dentro de las comillas dobles se reemplaza por la ruta actual.

Linux console
0 / 3 completado(s)
Loading Linux Terminal...

Qué son realmente el éxito y el fallo — estado de salida y echo $?

El 'éxito o fallo' que vigilan && y || lo determina un número llamado estado de salida que un comando deja al terminar.

0 significa éxito y cualquier cosa distinta de 0 significa fallo.

El estado de salida del comando anterior va a la variable especial $?, que puedes consultar con echo $?.

Estado de salidaSignificadoComprobación
0El comando anterior tuvo éxitoecho $? muestra 0
distinto de ceroEl comando anterior fallóecho $? muestra 1, etc.
Leer el estado de salida con echo $?
ls . y luego echo $?0 (éxito)cat nofiley luego echo $?distinto de cero(fallo)
Justo tras un comando que tiene éxito, echo $? es 0; justo tras uno que falla, es distinto de cero.
ls .            # un comando que tiene éxito
echo $?         # estado de salida anterior -> 0
cat nofile.txt  # un comando que falla
echo $?         # estado de salida anterior -> distinto de cero (p. ej. 1)

① Ejecuta ls . y luego echo $?, y confirma que muestra 0 porque tuvo éxito.

② Ejecuta cat nofile.txt y luego echo $?, y confirma que muestra un valor distinto de cero (como 1) porque falló.

③ Date cuenta de que el número de echo $? es en lo que se basan && y || para decidir.

Linux console
0 / 3 completado(s)
Loading Linux Terminal...
QUIZ

Verificación de conocimientos

Responde cada pregunta una a una.

Pregunta 1¿Cuándo se ejecuta cmd2 en cmd1 && cmd2?

Pregunta 2¿Qué imprime echo '$name'? (suponiendo que name=Linux está fijado)

Pregunta 3¿Cuál es correcto sobre el papel de ||?