educación, informática y demás

2500 - Administación de Sistemas

Leyendo información de ficheros

Vamos a utilizar una técnica muy sencilla para recorrer o leer información de un fichero. Para ello utilizaremos el bucle for y la herramienta de sustitución de comandos $().

Ejemplo 1

Crea un script que simplemente muestre en pantalla las líneas de configuración de las cuentas de usuario que utilicen como shell /bin/bash

Algunos errores

El problema de esta solución es que se utiliza una variable que solo se va a usar en una ocasión y, sobre todo, que puede contener muchos datos, dependiendo del fichero.

El segundo problema, más importante, es el uso de una variable con nombre no significativo. Si recorremos información de usuarios, podemos llamar o usaurio o mejor todavía linea o infoUser.

Es decir un nombre que me de una pista sobre lo que va a almacenar la variable.

Otro posible error sería tratar de realizar la comprobación dentro del bucle

Es más sencillo, porque tenemos herramientas que lo hacen y las conocemos, filtrar la información a recorrer.

Solución propuesta

Código

Ahora lo probamos

Ejemplo 2

Vamos a mostrar para cada usuario que utilice /bin/bash, su nombre de usuario y la ruta de su directorio personal.

Solución propuesta

Vamos a probarlo

Si solo necesitamos dos datos de cada línea, podríamos filtrar estos datos directamente en el bucle for. Me explico:

De esta forma, si no vamos a utilizar más información de cada línea en el script, podemos cortar la información de las líneas en el comando ejecutado para obtener la información del fichero.

Ahora tendríamos líneas con solo dos campos, el nombre del usuario y la ruta del directorio personal.

Ejemplo 3

Vamos a crear un nuevo script que se llame checkUsers.sh. Este script recibirá por parámetro la ruta de un fichero de texto plano. Si el script no recibe ningún parámetro o la ruta proporcionada no es de un fichero, se deberá mostrar un mensaje de error adecuado y terminar la ejecución del script con un código de error.

El fichero contiene una lista de usuarios, un nombre de usuario en cada línea.

Buscaremos en el sistema información sobre cada uno de los usuarios almacenados en el fichero.

Si el usuario no existe en el sistema, lo indicaremos con un mensaje. Sino mostramos su nombre de usuario y ruta de su directorio personal.

Solución propuesta

Asignamos a la variable, fichero el primer parámetro.

Control de errores:

  • Si no me pasan parámetro: error
  • Sino si la ruta del fichero no existe o no es un fichero error

Para cada línea del fichero, leer el usuario y comprobamos si existe:

  • Si existe, mostramos su nombre de usuario y ruta del directorio personal sino mostramos un mensaje indicando que no existe

Primero vamos a crear una lista de usuarios y la guardamos en un fichero de texto plano en nuestro directorio personal.

Recomendación:

  1. Primero realizaría la asignación de variables y el control de errores
  2. Mostraría el contenido del fichero línea a línea
  3. Realizaría la función del script con cada línea de información

Paso 1

Paso 2

Si esto funciona, estaremos seguros de que la variable usuario contendrá el nombre del usuario con el que tenemos que realizar la función del script en cada vuelta o iteracción del bucle for.

Como el bucle for está recorriendo un fichero, en cada iteracción trabajaremos con cada uno de los elementos de ese fichero.

Paso 3

Sustituimos el comando echo por los comandos necesarios para llevar a cabo la función del script con cada usuario leído del fichero.

El cuerpo del bucle for, que es como se denominan los comandos que se ejecutarán dentro del for, no es complicado ni excesivamente grande. No obstante, podríamos mejorar la comprensión del código, metiendo estos comandos en una función.

Con este bucle nos centramos en recorrer los usuarios que están almacenados en el fichero. Con cada usuario llamamos a la función checkUser. En este nivel entendemos que para cada usuario, lo chequeamos o comprobamos. Pero, ¿qué hace la función checkUser?. Si queremos saber que hace nos vamos a su código.

Ahora, en el código de la función no tenemos que pensar en el bucle, nos centramos en la función. ¿Qué hace la función? Recibe por parámetro el nombre de un usuario y comprueba si existe o no en el sistema mostrando la información pertinente según el enunciado.

Dejar una respuesta