educatica!

educación, informática y demás

Shell scripts

Bash shell scripts 02

muestraParametros.sh

datosUsuario.sh

Vamos a crear un script llamado datosUsuario.sh que reciba por parámetro el nombre, apellidos, telefono y email de un usuario. Este script mostrará esta información por pantalla y después la añadirá al fichero users.log.

Esta versión solo muestra en pantalla

Así funciona… pero estamos repitiendo código. Y si nos piden que mostremos además la fecha y hora actual del sistema junto con el usuario actual…

El problema está en que estamos duplicando código, primero lo hemos escrito dos veces (CTRL+C – CTRL+V) segundo al duplicar código cualquier modificación sobre el script supone cambiar en dos sitios distintos, lo cual facilita errores humanos. ¿Como solucionamos este problema?

Podemos usar una función.

Si, por ejemplo, nos piden que guardemos información del último usuario para el que hemos utilizado el script en otro fichero, sería tan sencillo como volver a llamar o ejecutar la función muestraInfo con una nueva redirección.

checkHost.sh

Podemos comprobar si tenemos conexión con internet utilizando el comando ping. Con ping se envía un paquete echo a un host, equipo, de internet. Si responde, significa que tenemos conexión a Internet.

Vamos a consultar la ayuda de ping.

Con un comando

Con un script

Vamos a darle una vueltita para que me muestre la información de manera comprensible por humanos.

Repetimos varias veces un valor literal. Para mejorar la legibilidad y mantenimiento podríamos usar una variable

Vamos a hacer que la salida no se muestre en pantalla. Utilizamos redirecciones

Ahora se redirige la salida estándar el fichero /dev/null dónde se perderá como lágrimas en la lluvía.. Qué sucede si queremos que no se muestra nada en pantalla, ni salida normal ni errores. Redirigimos ambas salidas con &>.

checkGroup.sh

Vamos a crear un nuevo script que va a comprobar si un grupo existe. ¿Cómo comprobaríamos como usuario si un grupo existe?. Lo buscaríamos en /etc/group

En este script vamos a comprobar si existe un grupo concreto, que almacenaremos en una variable y si existe, mostraremos los miembros de dicho grupo. Si no, mostraremos un mensaje indicando que este grupo no existe en el sistema.

Sabemos obtener la información con comandos, ahora solo tenemos que ponerlo todo junto.

Si el comando cat /etc/group | grep -w ^$grupo funciona correctamente, se ejecuta sin errores, significa que el grupo existe. Esa va a ser la condición.

Se puede hacer con un grep, pero vamos a dejar la tubería con fines didácticos (para que veáis que se puede utilizar una tubería como comando condición de un if).

Si cada vez que queremos consultar información de un grupo tenemos que editar el fichero para cambiar una variable… mal asunto.

Vamos a probar a pasar un grupo que no existe por parámetro y a no pasar nada

Estaría bien poder controlar que no se ha pasado parámetro. Para ello, podemos comprobar si el valor de la variable grupo está vacía o no utilizando el comando test.

Si se cumple la expresión devuelve verdadero, sino devuelve falso. Es decir, el comando test comprueba la expresión y devuelve un valor de retorno del comando verdadero o falso en función de la expresión.

El comando test devolverá un valor de ejecución correcta si la cadena almacenada en la variable $grupo es una cadena vacía, es decir no se ha pasado parámetro.

Deja un comentario

Tema creado por Anders Norén