Si usas Linux, probablemente ya sabes lo útil que es la línea de comandos para gestionar archivos, instalar software y ejecutar programas. Pero este recurso puede ser aún más eficiente si quieres ejecutar varios comandos al mismo tiempo. La combinación de dos o más comandos se conoce como “concatenación de comandos“.
Consulta en el siguiente tutorial 10 formas de combinar los comandos.
1. Operador punto y coma (;)
El operador punto y coma (;
) permite ejecutar varios comandos seguidos. Para entenderlo mejor, abre una ventana de terminal (en Ubuntu y GNU/Linux Mint, pulsa Ctrl
+ Alt
+ T
). A continuación, escribe los siguientes tres comandos en una línea, separándolos con punto y coma, y pulsa Intro.
ls ; pwd ; whoami
Esta secuencia listará el contenido del directorio actual (ls
), mostrará el directorio actual en el que te encuentras (pwd
) y mostrará tu nombre de usuario (whoami
), todo ello con nuestra combinación de comandos. En esta combinación, no es necesario poner espacios entre los ‘puntos y comas’ y los comandos, ya que podrías introducir los tres comandos conjuntos: ls;pwd;whoami
.
2. Operador Ampersand (&)
La función ‘&
‘ – hará que el comando se ejecute en segundo plano. Basta con introducir un comando con un espacio y un ‘&’. Puedes ejecutar más de un comando en segundo plano a la vez.
Para ejecutar un solo comando en segundo plano, podemos utilizar el operador “&”. Pero para ejecutar varios comandos en segundo plano, podemos utilizar una de las dos formas siguientes
- Usar “&” junto con “&&”
- Usar “&” junto con el grupo de comandos
Así que vamos a ejecutar un archivo bash (que muestra “hola esgeeks“) en segundo plano usando el operador “&” y registramos la salida del comando en un archivo de registro:
date; ./hola.sh; date & > hola_backup.log
El uso de “&
” con “;
” sólo ejecutará el comando date
final en segundo plano. Pero el primer comando date
y el script de shell se ejecutan en primer plano. En su lugar, para ejecutar todos los comandos en segundo plano condicionalmente, hagamos;
date && ./hola.sh && date & > hola_backup.log
Otro ejemplo: Ejecutar dos comandos en segundo plano simultáneamente:
apt-get update & apt-get upgrade &
3. Operador lógico AND (&&)
Si necesitas que el segundo comando se ejecute después del primero, sepáralos con el operador lógico AND, representado por un doble y comercial (&&). Por ejemplo, si quieres crear un directorio llamado “MiCarpeta
” y luego entrar en él, escribe la siguiente secuencia y pulsa Intro:
mkdir MiCarpeta && cd MiCarpeta
Observa que cuando se ejecuta la secuencia, el directorio se crea con éxito. Con este resultado, observamos que, en la mayoría de los casos, es más seguro utilizar el operador lógico AND (doble et), en lugar del operador de punto y coma (;
), ya que esto garantiza que no se hará nada desastroso.
4. Operador Lógico OR (||)
Si necesitas ejecutar un segundo comando, sólo si el primero no tiene éxito, utiliza el operador lógico OR, que se representa con dos barras verticales (||
). Por ejemplo: si quieres verificar que un directorio ( [ -d ~/micarpeta]
) existe y no lo hace, sólo tienes que crearlo con el comando mkdir ~/micarpeta
.
A continuación, escribe el siguiente comando en el terminal de GNU/Linux y pulsa Intro:
[ -d ~/micarpeta ] || mkdir ~/micarpeta
En el ejemplo, para que todo funcione correctamente, comprueba que hay un espacio después del primer corchete y otro delante del segundo. Si no es así, el primer comando que comprueba si el directorio existe no funcionará. Si has escrito correctamente, y el directorio “micarpeta
” no existe, el segundo comando lo creará.
5. Operador NOT (!) en Linux
El operador NOT (!) es muy similar al operador “except” (en SQL). Este comando ejecutará todo excepto la condición dada. Para entender cómo funciona, crea una carpeta “esgeeks
” en tu directorio personal y navega hasta ella utilizando el comando “cd
“.
mkdir blog
cd blog
A continuación, crea varios tipos de archivos en la carpeta “esgeeks“.
touch a.doc b.doc a.pdf b.pdf a.xml b.xml a.html b.html
Verás, hemos creado todos los archivos nuevos en la carpeta “esgeeks”.
ls
Ahora elimina todos los archivos excepto los archivos “html
” al mismo tiempo, de forma inteligente.
rm -r !(*.html)
Sólo para comprobar, la última ejecución. Lista todos los archivos disponibles con el comando ls
.
ls
6. Operador PIPE (|)
Esta sentencia de flujo PIPE es muy útil cuando la salida del primer comando actúa como entrada del segundo comando. No hay límite en el número de comandos que se pueden concatenar.
Un ejemplo práctico: Para concatenar dos comandos, escribo:
grep esgeeks miarchivo.txt | more
El primer comando (grep
) encuentra las líneas en las que está presente la cadena “esgeeks” en el archivo miarchivo.txt
. En lugar de imprimirlos en la pantalla, el comando envía la salida al segundo comando (more
), que se encarga de paginar la visualización en la pantalla.
Otro ejemplo: Para ordenar el contenido de un archivo de texto, basta con redirigir la salida del comando CAT al comando SORT
cat miarchivo.txt | sort
La salida del comando cat
entra como entrada al segundo comando sort
que ordena y muestra el contenido textual.
7. Operador de Llaves {}
El operador de llaves es útil para combinar dos o más comandos, donde el segundo comando depende de la ejecución del primer comando.
Por ejemplo, comprueba si el directorio “esgeeks
” está disponible e imprime la salida correspondiente.
[ -d "esgeeks" ] || { echo El directorio no existe, creando el directorio ahora.; mkdir esgeeks; } && echo El directorio existe.
8. Operador de Paréntesis () en Linux
Entre todos los comandos de Linux, este operador permite ejecutar un comando específico por orden de prioridad.
Supongamos los siguientes pseudocomandos:
Comando1 && Comando2 || Comando3 && Comando4
En el pseudocomando anterior, ¿qué pasa si el Comando1
falla? Ninguno de los Comando2
, Comando3
, Comando4
será ejecutado, para ello utilizamos el operador de prioridad así:
(Comando1 && Comando2) || (Comando3 && Comando4)
En el script anterior, si el Comando1
termina con un error, el Comando2
también termina con un error, pero aún así la ejecución del Comando3
y del Comando4
depende del estado de salida del Comando3
.
9. Operador Barra Inversa Invertida (\)
La barra invertida () es un carácter de escape que indica al shell que no interprete el siguiente carácter. Si el siguiente carácter es una nueva línea, el shell leerá la sentencia como si no hubiera llegado al final. Esto permite que una sentencia abarque varias líneas.
Esta es una técnica útil que divide los comandos largos en declaraciones legibles contenidas en la ventana de la sesión del shell.
Las barras invertidas también dividen las sentencias de los comandos en partes comprensibles. Por lo tanto, pueden ser útiles para dividir un comando complejo en sus operaciones individuales. La barra invertida nos permite incluso ejecutar varios comandos en varias líneas desde un solo prompt.
Veamos un ejemplo de uso de barras invertidas para segmentar un comando complejo y largo:
$ find /etc -exec grep\
>'[0-9][0-9]*[.][0-9][0-9] \
> *[.][0-9][0-9]*[0-9][0-9]*' {} \;
Otro ejemplo de uso. Para evitar el error sintáctico de un archivo.
nano test(1).txt
bash: error sintáctico cerca del elemento inesperado `('
El siguiente comando abrirá el archivo de texto test(1).txt
.
nano test\(1\).txt
10. Combinación de Varios Operadores
También puedes combinar varios operadores en la misma secuencia. Por ejemplo, para comprobar si un archivo existe ( [ -f ~/foo.txt ]
). Si esto ocurre, el sistema mostrará un mensaje en la pantalla confirmando que el archivo existe ( echo "El archivo existe"
). Si el archivo no existe, un comando creará el archivo ( touch ~/foo.txt
).
Escribe el comando en el terminal y pulsa Intro
:
[ -f ~/esgeeks.txt ] && echo "El archivo existe" || touch ~/esgeeks.txt
Después de estos ejemplos, imaginemos las posibilidades y cómo pueden ayudarnos.
Y por último, todos estos métodos de combinación se pueden utilizar dentro de scripts en GNU/Linux (y ahora también en Windows 10/11).