9.5.3.- Uso de variables

Una variable es un contenedor para un valor que se determinará cuando se ejecute el script. Los valores de las variables se pueden pasar a los scripts como parámetros, se pueden generar internamente o extraerse del entorno del script. Las variables que se le pasan al script se suelen denominar parámetros y se representan mediante el signo del dolar ($) seguido de un número del 0 al  9, $0 representa el nombre del script, $1 es el primer parámetro, $2 es el segundo, y así sucesivamente. Por ejemplo, consideraremos la tarea de añadir un usuario. La creación de la cuenta suele implicar al menos a dos comandos: useraddpasswd. Puede que también necesitemos ejecutar comandos específicos como los que crean directorios que son propiedad del usuario, además del directorio home de éste. A continuación se muestra una posible solución mediante el uso de variables. Este script crea una cuenta y cambia su contraseña, además, crea un directorio en /share y define un enlace simbólico a dicho directorio desde el directorio home del nuevo usuario. También puede servir para ajustar la propiedad y los permisos dependiendo de las políticas del sistema:

tux_maestro_derEl comando shift desplaza las variables de los parámetros, de modo que lo que normalmente sería $2 ,se convierte en $1, lo que sería $3 se convierte en $2 y así sucesivamente. Al añadir un número, como en shift 3, las asignaciones se desplazan tantos puestos como indique el número. Sin embargo , el comando shift no altera la variable $0

 script_ejemplo_6Utilizando este script sólo tendremos que escribir tres cosas: el nombre del script, el nombre de usuario deseado y la contraseña. Por ejemplo, si el script se llama mkuser.sh, quedaría de la siguiente manera:

script_ejemplo_5

Normalmente los scripts operan silenciosamente, a no ser que encuentren problemas, por lo que la interacción es simplemente un resultado del comando passwd. Este script sustituye siete líneas de comandos por una. Cada línea utiliza el nombre de usuario, por lo que al utilizar este script reduciremos la probabilidad de causar problemas debido a un error de escritura en el nombre de usuario.

Otro tipo de variable es la asignada en el interior de los scripts, como las que se asignan empleando la salida de un comando. Se identifican mediante el signo del dolar ($) y suelen recibir nombres que comienzan con una letra mayúscula. Una vez definidas estas variables, podremos utilizarlas junto a los comandos normales como si fueran parámetros de comandos pasándole el valor de la variable al comando. Por ejemplo, si un script verifica si un router está activo con la ayuda de la utilidad ping, utilizaremos dos variables, la primera es $ip, que se extrae de la salida de route con los comandos grep, trcut. Si asignamos el valor a una variable desde la salida de un comando, deberíamos rodear el comando entre acentos graves ( ` ` ). La segunda variable, $ping, apunta al programa ping. Se podría omitir la segunda variable por la ruta completa al programa o directamente por ping. Este tipo de variable se utiliza para facilitar la modificación del script en el futuro. Por ejemplo, si movemos el programa ping, sólo necesitaremos modificar una línea de script:

ping_ejemplo_1

Si el router está activo veremos 5 paquetes devueltos y una información de resumen. Si el router está caído, veremos 5 mensajes que indican que no se puede contactar con el router.

scripts como el anterior son útiles para configurar funcionalidades que se basan en información especifica del sistema o que varía con el tiempo. Cuando combinamos las variables con expresiones condicionales, el script podrá realizar una acción  cuando se satisfaga una condición y otra en algún caso. Por ejemplo, si el script instala software, podemos comprobar el espacio libre del disco y abortar la instalación si no hay el suficiente disponible. Además de asignar variables con el operador de asignación, podemos leer las variables desde la entrada estándar utilizando read. Este método de asignación se emplea en scripts que deben interactuar con los usuarios. Por ejemplo, podemos modificar el script anterior para que solicite el usuario cuando lo ejecutemos, quedaría de la siguiente manera:

mkdiruser_2

Con esta modificación no tendremos que escribir el nombre del script junto con el nombre de usuario, sino que nos lo solicitará durante la ejecución.

Otro tipo especial de variable es la variable de entorno, que se asigna y a la que se accede de manera similar a las variables del script de consola. La diferencia estriba en que para definir una variable de entorno utilizamos el comando export, para hacer accesible el valor a los programas iniciados desde la consola o los scripts que hacen la asignación, lo que permite definir una variable de entorno en un script y utilizarla en otro script que ejecute el primero. Las variables de entorno se suelen definir en los scripts de inicio de la consola. Por ejemplo, si nuestro script llama a un programa, podremos comprobar la variable de entorno $DISPLAY y abortar si no está definida. Por convención, las variables de entorno están todas en mayúsculas y las variables de script de inicio que no son de entorno mezclan ambos tipos de letra.