Muy buenas. Ahí va el segundo post de la serie de Linux scripting. Si el primero fue básicamente un artículo de introducción, en el que expliqué que es el scripting, así como las ventajas y desventajas de los diferentes lenguajes que se utilizan (Bash o Python), ahora toca centrarnos en Bash.

En este post haré una breve introducción a Bash como lenguaje de scripting. Hablaremos más en detalle del entorno de Bash (variables y funciones), y de los principales archivos de configuración, donde se define la configuración Bash, tanto a nivel de sistema, como de usuario.

Anuncios

Tabla de Contenidos:

Bash como Lenguaje de Scripting

En un artículo de introducción que hice sobre la terminal de Linux ya hablé bastante sobre Bash como shell o interfaz de línea de comandos. De hecho, en este sentido es el interprete de comandos utilizado por defecto en la mayoría de distribuciones GNU/Linux, además de macOS.

Pero, en realidad, Bash es también es un lenguaje interpretado muy utilizado para la creación de scripts en Linux. Scripts que contienen una serie de instrucciones que se comunicarán con el Bash para que este ejecute las acciones pertinentes.

Del mismo modo que tu, como usuario, te puedes comunicar con Bash y ordenarle una serie de instrucciones a través de la terminal, como actualizar el sistema, instalar un paquete, crear un directorio, y un larguísimo etcétera, con un script puedes ir un paso más allá, ya que puedes agrupar muchas de esas ordenes en un mismo script, para que se ejecuten de forma automatizada.

Como se desprende de todo esto, todos (o casi todos) los comandos de Bash que puedes introducir por consola de forma manual, también los puedes incluir en un script. Esto tiene múltiples ventajas, no solo de cara a la automatización de tareas, sino por el hecho de poder incluir estructuras condicionales, bucles, etc.

Los scripts de Bash son de hecho muy utilizados para administradores de sistemas, programadores, y, en general, para cualquier usuario de GNU/Linux que suela hacer un uso intensivo del sistema.

El Entorno de Bash. Las Variables

Anuncios

El entorno shell en GNU/Linux y Unix consta de un gran conjunto de variables y funciones que permanecen en segundo plano y almacenan información en la memoria del sistema (las variables) o especifican ordenes de ejecución en determinadas situaciones (las funciones).

Centrándonos específicamente en las variables. podemos distinguir básicamente entre dos tipos de variables:

Variables Globales. Son aquellas que están disponibles de forma global en el sistema, y son validas y accesibles desde todas las shell.

Son aquellas que están disponibles de forma global en el sistema, y son validas y accesibles desde todas las shell. Variables Locales. Son aquellas que solo son validas y están disponibles para la shell o sesión actual. Son útiles para almacenar información más efímera, como puede ser, por ejemplo, el directorio de trabajo actual

Listar Variables Existentes

Una de las formas más completas para conocer todas las variables y funciones que conforman el entorno de Bash es a través del comando set. Si lo indicas tal cual, sin ningún argumento, te ofrecerá un listado con todas las variables del sistema (globales y locales), así como las funciones que confirman el entorno.

set

Si quieres ver únicamente un listado con las variables, puedes utilizar set con el argumento posix, para indicar que set debe operar en modo POSIX. Esto excluirá del output el listado de las funciones.

(set -o posix; set)

Si quieres centrarte en las variables globales, junto con los valores que contienen, puedes utilizar el comando env o printenv. A diferencia del comando anterior, en este caso solo se listarán las variables globales.

env

Para imprimir el valor de de una variable, puedes utilizar el comando printenv junto con el nombre de la variable. En el caso de la variable SHELL, por ejemplo, quedaría así:

printenv SHELL

Por defecto, te imprimirá la ruta de Bash (/bin/bash), ya que es la shell que se utiliza por defecto en la mayoría de distribuciones GNU/Linux.

Crear Nuevas Variables

A parte de las variables existentes en el entorno por defecto, puedes crear nuevas variables siempre que lo necesites. Para crear una nueva variable en el entorno interactivo de Bash, tan solo necesitas abrir una sesión nueva de terminal y teclear el siguiente comando, sustituyendo VAR_EJEMPLO por el nombre que le quieres dar a tu nueva variable:

VAR_EJEMPLO=valor_ejemplo

Hecho esto, puedes imprimir el valor por consola utilizando el comando echo seguido del nombre de la variable con el símbolo del dolar delante. Aquí tienes un ejemplo:

echo $VAR_EJEMPLO

Esto te imprimirá el mismo valor que le has asignado en el momento de su creación, es decir, valor_ejemplo.

Es importante mencionar que todas las variables creados de esta manera se crean como variables locales. Puedes comprobarlo tu mismo abriendo una nueva sesión de bash, y teclear el mismo comando que antes:

echo $VAR_EJEMPLO

En este caso, no se imprimirá ningún valor, ya que la variable VAR_EJEMPLO es una variable local, y, por lo tanto, solo existe en la sesión de shell desde la que ha sido creado.

Ficheros de Configuración

A continuación te presento los principales archivos de configuración que permiten el correcto funcionamiento del entorno de ejecución de /bin/bash. Los archivos de configuración globales (comunes a todos los usuarios del sistema) se suelen ubicar dentro del directorio /etc. Paralelamente, en el directorio /home de cada usuario se encuentran los ficheros de configuración a nivel particular de cada cuenta de usuario.

etc/profile

Este es el primer fichero que lee el sistema al iniciar el entorno de la shell. Se utiliza para establecer el perfil del entorno de Bash (y otras shells compatibles) para todos los usuarios del sistema. Al ser un fichero de configuración global, en un sistema con múltiples usuarios este archivo solo debería ser editado por el administrador del sistema.

Puedes consultar su contenido con cualquier editor de archivos por consola como puede ser Nano (aunque también podrías utilizar Gedit, si te es más sencillo). Si utilizas Nano para visualizarlo, para salir sin guardar cambios debes utilizar la combinación de teclas CTRL-X e indicar, a continuación, que no deseas guardar los cambios.

nano /etc/profile

El fichero /etc/profile tiene su contrapartida a nivel de usuario en el archivo .profile que se encuentra en el directorio home de cada usuario.

etc/bash.bashrc

Este fichero no es automáticamente leído por el sistema, sino a partir de la referencia de él que se incluye en /etc/profile.

Como antes, puedes leer su contenido con el editor de ficheros Nano. Eso si, hay que el nombre del bash.bashrc es el que se utiliza en Debian, Ubuntu y derivados. En Red Hat y otras distribuciones, el fichero se denomina simplemente bashrc.

nano /etc/bash.bashrc

Al igual que ocurre antes, el fichero /etc/bash.bashrc también tiene su contrapartida a nivel de cada usuario. Este es el archivo .bashrc ubicado en la home de cada usuario.

Esto Continua

Este ha sido solo una pequeña introducción al entorno de trabajo de Bash. Ahora ya sabes como conocer las principales variables globales y locales de Bash, y los principales ficheros de configuración del entorno. Antes de acabar, no me quiero ir sin antes recordarte que esta guía forma parte de una completa serie centrada al scripting en Linux.

En la próxima guía ya me centraré en la sintaxis del lenguaje, para que aprendas a utilizar las sentencias y/o estructuras más importantes que necesitarás conocer, de cara a poder crear tus propios scripts. Hasta la próxima!

Referencias

A continuación tienes un listado de las referencias que he utilizado para documentarme. Si quieres profundizar más en todo lo que explico en el post, te vendrá bien su lectura: