educación, informática y demás

2405 - Scripts GNU/Linux

GNU Bash Shell Scripts. Entrada de datos

La mayoría de los scripts que creemos a lo largo de nuestra carrera profesional (y actualmente académica) necesitan datos de entrada con los que trabajar.

Podemos crear scripts que no utilicen o necesiten datos de entrada, por ejemplo que muestren el contenido del directorio actual y lo almacenen en un fichero de log. Sin embargo, no es lo más habitual, puesto que gracias a las entradas de datos o a poder utilizar variables podemos especializar la función de nuestro script para poder reutilizarlo ampliando su funcionalidad.

De forma general podríamos identificar las siguientes fuentes de datos de entrada en un script:

  1. Variables de entorno
  2. Parámetros
  3. Variables internas
  4. Ficheros
  5. Entrada por teclado

Cómo leer el valor de una variable de entorno

Lo primero que deberíamos conocer es qué variable de entorno tiene el valor o el dato que necesitamos. Por ejemplo, hay una variable de entorno llamada HOME que contiene la ruta del directorio personal del usuario actual.

Con el comando env podemos mostrar en pantalla algunas de las variables de entorno disponibles.

showHome.sh

Muestra el nombre del usuario actual, la shell que está usando, la ruta del directorio personal del usuario actual, resumen de ocupación en disco del directorio personal en un formato comprensible por humanos y, posteriormente, su contenido.

Esos datos no los conocemos en tiempo de compilación o desarrollo, que es cuando estamos escribiendo el script. No obstante, si sabemos que hay unas variables de entorno que contienen los valores de estos datos en el sistema y que podemos consultarlas para obtener los valores en el momento en el que se ejecute el script, es decir en tiempo de ejecución.

Con esta información, la salida del script debería ser similar a esta

Vamos a abrir el editor de textos en formato gráfico mousepad pasándole la ruta del fichero que queremos editar.

Ahora editamos el script

Ficheros

Tenemos que ser capaces de leer datos de un fichero. Para ello, nosotros, vamos a utilizar un bucle for que nos permita recorrer cada línea del fichero.

¿Pero cómo hacemos para recorrer el contenido del fichero? ¿Sabemos mostrar el contenido de un fichero por pantalla?. Si, con el comando cat (para esto no uséis more ni less, puesto que estos comandos son interactivos, es decir esperan que el usuario pulse alguna tecla)

Todo lo que seamos capaces de mostrar por pantalla lo podemos usar dentro de nuestro script con la herramienta $(CMD) dónde CMD es un comando (o varios comandos si los encadenamos con tuberías.

showUsers.sh

Muestra en pantalla las líneas de configuración de cuentas de usuario en el sistema.

Vale, pero queda feo… muestra solo el nombre del usuario, la ruta de su directorio personal y la shell que está utilizando. Para ello tendremos que filtrar, cortando los campos de cada registro (línea del fichero) y seleccionando los que nos interesan. Podemos consultar ayuda del fichero passwd consultando la sección 5 de la página de manual de passwd.

¿Qué es lista? Vamos a buscar en la página de manual.

Con la / seguida de la palabra que estamos buscando, podemos buscar un texto en la página de manual

Si pulsamos n minúscula pasamos a la siguiente ocurrencia de la palabra. Con N mayúscula vamos hacia atrás, a la anterior ocurrencia.

En este caso concreto la explicación de LISTA no está definida con esa cadena de caracteres en la página de manual. Sin embargo, buscando un poco entre las explicaciones encontramos

Vamos a ver si esto funciona

Vale pero, ahí hay mucha gente. Vamos a mostrar solo los usuarios que utilicen como shell /bin/bash.

Con esto estamos recorriendo línea a línea la salida de un comando. La salida de este comando será la selección de las líneas de un fichero.

Esto sería algo similar a una consulta select en SQL.

Vale, pero ahora nos gustaría mostrar el nombre del usuario y la ruta del directorio personal de este usuario seguida de el resumen de ocupación en disco de su directorio personal.

Vale, pero ahí hay mucha gente… muestra solo las cuentas de usuario que utilicen como shell /bin/bash

Vale, pero quienes eran los que no están. Muestra solo los nombres de cuentas de usuario que no utilicen como shell /bin/bash

Para asegurarnos de que vamos a recorrer el fichero línea a línea tenemos que asignar a la variable IFS el valor de salto de línea que es \n.

Dejar una respuesta