GNU/Linux >> Tutoriales Linux >  >> Linux

Script Bash (III)

Este es el tercer artículo de una serie centrada en el scripting de Gnu Bash. En el primer artículo acabamos de crear un script simple con comandos, uno tras otro. También vimos el uso de algunas variables.
El segundo artículo cubrió algunas estructuras de control bash. Este cubrirá redirecciones, canalizaciones y sustitución de comandos.

Los buenos viejos tiempos

Al principio había un principio:una herramienta debería hacer una cosa y hacerlo bien. Dependía del usuario combinar esas herramientas para lograr los resultados deseados.

Ahora nosotros (admítelo:a veces tú también podrías sentirte perdido sin una GUI) hacemos (casi) todo con un mouse. Pero la línea de comandos sigue ahí y otras veces escribir algunos comandos o un script es más fácil que hacer clic en cada elemento de la pantalla.

Redireccionamiento

Podemos redirigir la entrada o la salida de un comando antes de que se ejecute. Podemos usar esta redirección para almacenar la salida de un comando en un archivo. O podemos usar la redirección de entrada para leer algunos datos de un archivo.

Por ejemplo, si queremos almacenar el estado actual (es decir, ls -l) de una carpeta en un archivo de texto para comparar los cambios más adelante, usamos > operador como este:

ls -l > status.txt

Esto redirigirá la salida estándar de ls -l a un archivo llamado status.txt. Si status.txt ya existe, se sobrescribirá. Para agregar la salida estándar a un archivo existente, use >> operador.

Para redirigir la entrada estándar a un comando, use < operador. Por ejemplo:

mysql somedb < file.sql

Para redirigir el error estándar a algún archivo, agregue el descriptor de archivo 2 (el descriptor de archivo 1 es la salida estándar (stdout), 0 es para la entrada (stdin)) a la redirección:

comando 2> archivo

Preste atención a que no haya espacio entre el número del descriptor del archivo y el operador. Si hubiera un espacio entre ellos, ese '2' se convierte en un parámetro. Por ejemplo:

El primer comando es “ls (archivo) algo ” y redirija la salida de error a status.txt. En el segundo comando vemos el error de nuestro primer comando:no se encuentra el archivo llamado algo.

El tercer comando es ls archivos algo y 2 (ninguno de ellos existe) y redirige la salida estándar a status.txt. Los errores (archivo no encontrado) se imprimen en la pantalla y en el cuarto comando vemos que status.txt se dejó en blanco porque no hay archivos con el nombre "2" o "algo".

Podemos combinar redirecciones, como enviar stdout y stderr a un archivo, pero el orden de las redirecciones es importante. Por ejemplo:

Del manual de bash:el primer comando dirige solo la salida estándar al archivo combine.txt, porque el error estándar se duplicó desde la salida estándar antes de que la salida estándar se redirigiese a combine.txt

En el segundo comando, la salida estándar se redirigió al archivo combine.txt y luego el error estándar se redirigió a stdout.

Tubos

Del manual de bash:Una canalización es una secuencia de uno o más comandos separados por uno de los operadores de control | o |& .

El primer operador conecta la salida estándar del primer comando a la entrada estándar del segundo. Por ejemplo, si no recuerdo que puedo usar comodines en el comando ls y quiero enumerar todos los scripts de shell en la carpeta actual. Puedo hacer un ls y filtre la salida con grep :

La gente de Perl tiene un lema:«Hay más de una forma de hacerlo ». Personalmente, creo que debería aplicarse (casi) en todas partes.

El segundo operador conecta el error estándar del primer comando con la entrada estándar del segundo. Por ejemplo, estoy usando el comando tr (que traduce caracteres) para burlarse de los mensajes de error:

También configuré la variable de shell LANG para cambiar la salida de español a inglés.

Sustitución de comandos

Con la sustitución de comandos podemos ejecutar un comando dentro de nuestro script y usar la salida de ese comando. Es más fácil entender cómo funciona con un ejemplo. El comando seq se usa para producir una secuencia de números:

Por ejemplo, podemos usar esta salida para crear carpetas con nombres secuenciales con sustitución de comandos. Podemos usar `comando` o $(comando) .

En este ejemplo asignamos la salida de seq 1 5 a la variable i y utilícelo en un bucle for.

Estén atentos

Hasta ahora, tenemos suficiente para que la computadora haga (gran parte) del trabajo por nosotros. Depende de usted investigar esas pequeñas herramientas que hacen una tarea pero la hacen muy bien e integrarlas a través de scripts o en la línea de comandos.

Para el último artículo de esta serie, me concentraré en el diálogo programa para crear una GUI (en realidad una TUI) para agregar interactividad a nuestros scripts.


Linux
  1. Explicación del comando Bash trap

  2. Comando de espera bash

  3. Bash secuencias de comandos (I)

  4. Uso del comando Linux Basename en Bash Scripts

  5. comando de exportación bash

Comando Bash printf

Bash Scripting - Declaraciones condicionales

Bash Scripting - Comando Printf explicado con ejemplos

Cómo usar el comando de fecha en Bash Scripting en Linux

Script Bash (II)

Bash Beginner Series #5:Uso de operadores aritméticos en Bash Scripting