GNU/Linux >> Tutoriales Linux >  >> Linux

Comandos acoplados con operadores de control en Bash

Los comandos compuestos simples, como encadenar varios comandos en una secuencia en la línea de comandos, se usan con frecuencia. Dichos comandos están separados por punto y coma, que definen el final de un comando. Para crear una serie simple de comandos de shell en una sola línea, simplemente separe cada comando con un punto y coma, así:

command1 ; command2 ; command3 ; command4 ; 

No necesita agregar un punto y coma final porque presionar la tecla Intro implica el final del comando final, pero está bien agregarlo para mantener la coherencia.

La terminal de Linux

  • Los 7 mejores emuladores de terminal para Linux
  • 10 herramientas de línea de comandos para el análisis de datos en Linux
  • Descargar ahora:hoja de referencia de SSH
  • Hoja de trucos de comandos avanzados de Linux
  • Tutoriales de línea de comandos de Linux

Todos los comandos se ejecutarán sin problemas, siempre que no se produzca ningún error. Pero, ¿qué sucede si ocurre un error? Podemos anticipar y permitir errores usando el && y || operadores de control integrados en Bash. Estos dos operadores de control proporcionan algo de control de flujo y nos permiten alterar la secuencia de ejecución del código. El punto y coma y la nueva línea carácter también se consideran operadores de control Bash.

El && el operador simplemente dice "si el comando1 es exitoso, entonces ejecute el comando2". Si el comando1 falla por algún motivo, el comando2 no se ejecutará. Esa sintaxis se parece a:

command1 && command2

Esto funciona porque cada comando devuelve un código al shell que indica si se completó con éxito o falló durante la ejecución. Por convención, un código de retorno (RC) de 0 (cero) indica éxito y cualquier número positivo indica algún tipo de falla. Algunas herramientas de administración de sistemas solo devuelven un 1 para indicar cualquier falla, pero muchas usan otros códigos numéricos positivos para indicar el tipo de falla.

$? del shell Bash La variable se puede verificar muy fácilmente mediante un script, mediante el siguiente comando en una lista de comandos, o incluso directamente por un administrador de sistemas. Veamos los RC. Podemos ejecutar un comando simple e inmediatamente verificar el RC, que siempre pertenecerá al último comando que se ejecutó.

[student@studentvm1 ~]$ ll ; echo "RC = $?"
total 284
-rw-rw-r--  1 student student   130 Sep 15 16:21 ascii-program.sh
drwxrwxr-x  2 student student  4096 Nov 10 11:09 bin
<snip>
drwxr-xr-x. 2 student student  4096 Aug 18 10:21 Videos
RC = 0
[student@studentvm1 ~]$

Este RC es 0, lo que significa que el comando se completó con éxito. Ahora pruebe el mismo comando en un directorio donde no tenemos permisos.

[student@studentvm1 ~]$ ll /root ; echo "RC = $?"
ls: cannot open directory '/root': Permission denied
RC = 2
[student@studentvm1 ~]$

El significado de este RC se puede encontrar en el ls página man del comando.

Probemos el && operador de control como podría ser utilizado en un programa de línea de comandos. Comenzaremos con algo simple:cree un nuevo directorio y, si tiene éxito, cree un nuevo archivo en él.

Necesitamos un directorio donde podamos crear otros directorios. Primero, cree un directorio temporal en su directorio de inicio donde pueda hacer algunas pruebas.

[student@studentvm1 ~]$ cd ; mkdir testdir

Crea un nuevo directorio en ~/testdir , que debe estar vacío porque lo acaba de crear, y luego cree un nuevo archivo vacío en ese nuevo directorio. El siguiente comando hará esas tareas.

[student@studentvm1 ~]$ mkdir ~/testdir/testdir2 && touch ~/testdir/testdir2/testfile1 
[student@studentvm1 ~]$ ll ~/testdir/testdir2/
total 0
-rw-rw-r-- 1 student student 0 Nov 12 14:13 testfile1
[student@studentvm1 ~]$

Sabemos que todo funcionó como debería porque testdir El directorio es accesible y se puede escribir. Cambiar los permisos en testdir por lo que ya no es accesible para el usuario estudiante de la siguiente manera:

[student@studentvm1 ~]$ chmod 076 testdir ; ll | grep testdir
d---rwxrw-. 3 student student  4096 Nov 12 14:13 testdir
[student@studentvm1 ~]$

Usando el grep comando después de la lista larga (ll ) muestra la lista de testdir . Puede ver que el usuario estudiante ya no tiene acceso a testdir directorio. Ahora ejecutemos casi el mismo comando que antes, pero cámbielo para crear un nombre de directorio diferente dentro de testdir .

[student@studentvm1 ~]$ mkdir ~/testdir/testdir3 && touch ~/testdir/testdir3/testfile1 
mkdir: cannot create directory ‘/home/student/testdir/testdir3’: Permission denied
[student@studentvm1 ~]$

Aunque recibimos un mensaje de error, usando && operador de control evita el toque el comando se ejecute porque hubo un error al crear testdir3 . Este tipo de control de flujo lógico de línea de comandos puede evitar que los errores se agraven y se conviertan en un verdadero lío. Pero hagámoslo un poco más complicado.

El || El operador de control nos permite agregar otro comando que se ejecuta cuando la declaración inicial del programa devuelve un código mayor que cero.

[student@studentvm1 ~]$ mkdir ~/testdir/testdir3 && touch ~/testdir/testdir3/testfile1 || echo "An error occurred while creating the directory."
mkdir: cannot create directory ‘/home/student/testdir/testdir3’: Permission denied
An error occurred while creating the directory.
[student@studentvm1 ~]$

Nuestra sintaxis de comando compuesta que usa control de flujo toma esta forma general cuando usamos && y || operadores de control:

preceding commands ; command1 && command2 || command3 ; following commands

El comando compuesto que utiliza los operadores de control puede estar precedido y seguido por otros comandos que pueden estar relacionados con los de la sección de control de flujo pero que no se ven afectados por el control de flujo. Todos esos comandos se ejecutarán sin importar nada de lo que ocurra dentro del comando compuesto de control de flujo.

Estos operadores de control de flujo pueden hacer que el trabajo en la línea de comando sea más eficiente al manejar las decisiones y avisarnos cuando ocurre un problema. Los uso directamente en la línea de comandos, así como en scripts.

Puede limpiar como usuario raíz para eliminar el directorio y su contenido.

[root@studentvm1 ~]# rm -rf /home/student/testdir

¿Cómo se utilizan los operadores de control de Bash? Háganos saber en la sección de comentarios.


Linux
  1. Ver comandos y tareas con el comando watch de Linux

  2. La diferencia entre los operadores Bash [[ Vs [ Vs ( Vs ((?)

  3. ¿El comando Rm en Bash Script no funciona con variables?

  4. 6 Operadores de encadenamiento de línea de comandos de Bash Shell en Linux

  5. '&&' vs. '&' con el comando 'test' en Bash

Cómo corregir fácilmente los comandos Bash mal escritos en Linux

Comando Bash Echo explicado con ejemplos en Linux

Bash Scripting - Comando Printf explicado con ejemplos

Controle el uso de recursos del sistema con el comando Ulimit

Salve el día con éxito con los comandos del historial de Bash

Ejecutar comandos con límite de tiempo en Ubuntu 20.04