educatica!

educación, informática y demás

Shell scripts

Bash shell scripts 03

checkHost.sh

checkGroup.sh

Vamos a crear un script que compruebe si un grupo existe. Si existe, mostrará un mensaje indicando que existe, sino nos mostrará un mensaje indicando que no existe.

Tenemos que determinar qué comando nos permitirá comprobar si el grupo existe o no. Vamos a buscar el comando pensando como humanos. Nosotros, como administradores, ¿cómo comprobaríamos si un grupo existe? Buscándolo en el fichero de grupos del sistema.

Vamos a ejecutarlo y ver qué tal funciona.

Versión 02 – Mostrando información y creando el grupo

Vamos a darle una vueltita al script… Si el grupo existe, que muestre información del grupo. En distintas líneas, que muestre el nombre del grupo, el GID del grupo y la lista de miembros del grupo.

Si no existe, entonces podemos crear el grupo.

Si tenemos que ejecutar comandos como administrador, deberíamos ejecutar el script como sudo, no insertar comandos con sudo dentro del script.

Version 03 – Preguntando al usuario

Todo ha funcionado bien, pero… se crean los grupos que no existen siempre. Nos gustaría que, si el grupo no existe se pregunte al usuario si quiere crear un nuevo grupo o no. Si el usuario responde que si, entonces creamos el grupo, sino no hacemos nada.

Para obtener datos por teclado del usuario utilizamos el comando read. Vamos a consultar la ayuda de read con el comando help.

Read permite leer de teclado información que inserte el usuario. Cuando éste pulse Enter, significa que ha terminado de insertar información. La información insertada se almacena en la variable cuyo nombre se ha proporcionado al comando read. Si no se proporciona ningun nombre de variable, entonces read asigna la entrada a la variabla REPLY.

Usándo así read no sabemos, como usuario, que datos nos están pidiendo. Para solucionar este problema podemos utilizar, en un script, echo -n o, mejor, la opción -p de read que permite escribir un prompt en pantalla.

Con esto ya podemos preguntar, dentro de nuestro script, al usuario si desea o no crear el grupo que no existe en el sistema.

Ahora el problema al que nos enfrentamos es saber si la variable respuesta contiene una s o no.

Para ello vamos a utilizar el comando test. Así que consultemos su ayuda.

Si nos centramos en el cuerpo del else del primer if, nos quedaría algo así:

El comando if es un comando como otro cualquier, así que podemos usarlo dentro del cuerpo de un if o de un else.

El comando test comprueba si se cumple la expresión, en este caso $respuesta = s. Si se cumple, devuelve un valor de retorno de comando correcto sino devolverá un valor de salida incorrecto.

La S mayúscula no se tiene en cuenta en la comparación. Podemos dejarlo así o añadir también la comprobación de S, para ello tenemos que comprobar si la respuesta es una s o una S.

Versión 04 – Comprobando parámetro

¿Qué pasa si el usuario ejecuta el script sin parámetros?. Deberíamos decidir qué hacer. Podemos mostrar un mensaje de error y terminar la ejecución del script o pedir al usuario que inserte el nombre del grupo a consultar o ejecutar el resto del script con un valor vacío para la variable grupo.

Esto último, no es recomendable para este script. Este script no tiene sentido si no se proporciona el nombe de un grupo, necesitamos el nombre de un grupo. La decisión, en este caso será que si se pasa parámetro mostramos mensaje de error y terminamos la ejecución del script.

¿Cómo podemos saber si se ha pasado parámetro?. De nuevo vamos a utilizar el comando test, comprobando si la variable que almacena el primer parámetro está vacía o no. Si está vacía, significa que no se ha pasado parámetro.

Comprobamos si está vacía la variable grupo.

Vamos a comprobar que funciona la comprobación de parámetros.

Mejor así

Versión 05 – Uso abreviado del comando test

El comando test se utiliza muchísimo como condición del comando if. No es el único comando que se puede utilizar como condición, pero si es uno de los que más se utiliza.

Por eso mismo, existe una forma abreviada de utilizar el comando test con corchetes. Vamos a consultar, de nuevo, la ayuda de test.

Podemos poner la expresión a evaluar o comprobar directamente entre corchetes, separados por un espacio.

Ahora, tan solo tenemos que escribir la expresión entre corchetes, asegurándonos de dejar un espacio de separación entre los corchetes. Al fin de cuentas, esto no es un lenguaje de programación de alto nivel, son comandos que tiene que interpretar la shell.

Con los corchetes se indica a la shell bash que ejecute el comando test pasándo como parámetro la expresión que está entre corchetes. Es lo mismo, pero más elegante, más facil de entender y parecido al uso que se hace de los if en los lenguajes de programación de alto nivel como C o Java.

Deja un comentario

Tema creado por Anders Norén