LPIC-1 Tema 105.1: shell y shell scripting

Siguiente entrega de las certificaciones LPIC-1, con el tema 105.1, es decir, el tema que engloba a las prácticas sobre el shell y el shell scripting. Una de las cosas esenciales que todo administrador de sistemas debería controlar, más aún cuando se habla de sistemas operativos Unix/Linux, donde el uso de la consola está a la orden del día.

En este tema se busca evaluar las competencias del administrador de sistemas sobre la personalización de los entornos de shell como se necesita, así como modificar los perfiles de usuario y globales del sistema. Una pequeña introducción al shell que continuará con más nociones en los futuros temas…

Variables de entorno del shell

Ya sabes que Bash es el principal shell que se emplea en Linux, y ya vimos en otros artículos algo sobre las secuencias de escape, pipes, redirecciones, expresiones regulares, etc. Ahora vamos con las variables de entorno y de shell, es decir, unos parámetros que puedes variar.

Las variables de shell son locales para un shell, mientras que las variables de entorno se heredan para cualquier programa. Eso afectará la forma en la que se comportan los procesos, ahorrando tiempo al no tener que declararlas para cada uno de los programas o comandos ejecutados.

Entre las variables más destacadas, puedes encontrar:

  • HOME: especifica el directorio personal del usuario. Por ejemplo, podrías usarlo con el comando cd &HOME para ir al directorio personal como harías con cd ~ o cd /home/usuario.
  • HOSTNAME: es el nombre de la máquina o de host.
  • LINES: define la anchura de las líneas a la hora de mostrarlas en el shell.
  • PATH: es la lista de rutas donde se buscan los programas. Es decir, cuando tú ejecutas un comando, no tienes que especificar la ruta completa donde se aloja el binario. Por ejemplo, simplemente ejecutas ls, y no tienes que usar /bin/ls. Puede ser interesante agregar un directorio a él si, por ejemplo, tienes binarios o scripts en alguna ruta concreta y los usas frecuentemente, para así no tener que teclear toda la ruta. Por ejemplo, suele ser $PATH=/bin:/usr/bin:/sbin.
  • PS1: es el prompt.
  • SHELL: es el intérprete de comandos por defecto. En este caso sería $SHELL=/bin/bash.
  • TERM: es el tipo de terminal que contiene el nombre del emulador de terminal que se está ejecutando. Por ejemplo: $TERM=xterm.
  • USER: es la variable para el nombre de usuario actual registrado en el sistema.
  • LOGNAME: el ID del usuario en el login.
  • PWD: ruta por defecto o directorio de trabajo para el usuario.
  • OLDPWD: contiene la ruta del directorio de trabajo anterior. Importante si sueles usar dos frecuentemente.
  • LANG: para el idioma por defecto del sistema. Por ejemplo $LANG=es_ES.utf8.
  • RANDOM: variable de entorno para obtener valores aleatorios.
  • EDITOR: especifica el editor de texto por defecto. Por ejemplo $EDITOR=/usr/bin/nano.
  • HISTCONTROL, HISTIGNORE, HISTFILE, HISTFILESIZE: para especificar si un comando se añade o no al historial, lista de los que se pueden agregar, el fichero donde se guarda el historial, número máximo de comandos guardados en el historial respectivamente.
  • MANPATH: la ubicación de las páginas del manual.
  • PPID, UID,…: número de proceso padre, ID del usuario actual, etc.

Además de esas variables, existen otras especiales como:

  • $?: retorna el último comando ejecutado.
  • $$: PID del Shell que tenemos activo.
  • $!: PID del último proceso iniciado en segundo plano.
  • $-: opciones del shell.

Para hacer referencia a cualquier variable, es necesario siempre que vaya precedida por el signo $. Por ejemplo:

#Para mostrar el contenido de la variable PATH
echo $PATH

#Para ir al directorio personal
cd $HOME

Recuerda que puedes usar source o . para ejecutar scripts. Por ejemplo, puedes usar source miscript.sh o ./miscript.sh. El comando source también puede hacer releer/recargar uno de los ficheros que veremos más adelante. Por ejemplo source .bashrc tras hacer cambios en alguna variable…

Para gestionarlas, se pueden usar algunos comandos como:

#Mostrar variables
set 
export 
env

#Declarar una variable local y mostrarlas
mivariable=hola
numero=3
echo $mivariable $numero

#Para declarar y exportar las variables globales o exportables
mivariable='Hola mundo'
export mivariable
echo $mivariable

#Variables de entorno persistentes
export mivariable='Hola mundo'

#Eliminar variables de entorno definidas y comprobar que ya se encuentra vacía
unset num
echo $num

#Puedes usar incluso un arreglo o array y acceder a un valor concreto con punteros
mivariable=(primero segundo tercero cuarto)
echo ${mivariable[2]}

#Para mostrar el arreglo comleto
echo ${mivariable[*]}

#Eliminar un valor del array 
unset mivariable[1]

#Eliminar el arreglo entero
unset mivariable

#Proteger una variable para hacerla de solo lectura
readonly var
readonly var=4

#También existe el comando setenv para introducir variables de entorno con formato setenv nombrevariable valorvariable

Perfiles

Además de declarar las variables con los comandos vistos anteriormente (temporalmente), también las puedes guardar en ciertos archivos para que sean permanentes:

  • /etc/bashrc: se ejecuta cada vez que cualquier usuario ejecuta bash. Es general y afecta a todos los usuarios del sistema.
  • /etc/profile: se ejecuta cuando cualquier usuario inicia sesión. Es general y afecta a todos los usuarios del sistema.
  • ~/.profile o ~/.bash_profile: igual al anterior, pero afecta solo a nuestro usuario o usuario actual.
  • ~/.bashrc o ~/.bash_bashrc: igual a /etc/bashrc pero para un usuario particular, como es el usuario actual al que pertenece. Los cambios solo afectarán a él. Se ejecutará este script cuando ese usuario inicia sesión.
  • ~/.bash_login: Bash permite algunos sinónimos para .profile como es éste. Si .bash_profile no existe se buscará primero .bash_login y si tampoco está busca .profile. Si hay varios, solo uno se leerá.
  • ~/.bash_logout: es el fichero que lee Bash cuando se sale del sistema o sesión. Se pueden definir algunas tareas como eliminar ficheros temporales generados durante la sesión, registrar el tiempo de sesión del usuario, etc. Si no existe, no se ejecutará nada al salir.

Puedes usar tu editor de texto favorito para mirar el contenido de estos ficheros, verás que existen algunas variables declaradas que puedes alterar o introducir nuevas. Por ejemplo, puedes agregar alias de comandos, exportar variables, etc.:

#Agregar dentro del contenido de ~/.bashrc

alias ls='ls --color=auto'
export PATH=/home/isaac/codigo:$PATH

Si deseas que estos ficheros los tenga un nuevo usuario que vas a crear, puedes agregarlo a skel. Por ejemplo, para agregar .bash_profile puedes hacer una copia de éste en: /etc/skel/.bash_profile.

Recuerda que también puedes crear alias en esos ficheros que has visto anteriormente para usar una palabra más corta e intuitiva para un comando más largo que uses frecuentemente y así puedas ejecutarlo de forma más simple. Si quisieras eliminar el alias anterior, puedes usar:

unalias ls

Por último, también tengo que introducir las funciones con function. Por ejemplo:

#Definir la función
function mensaje { echo "Hola mundo"; }

#Invocarla
mensaje

Como ves, lo anterior lo que hace es que muestra el mensaje Hola mundo cuando usas el nombre de la función. Pero como mostraré en siguientes artículos, se pueden generar funciones mucho más interesantes…

Isaac

Apasionado de la computación y la tecnología en general. Siempre intentando desaprender para apreHender.

Deja una respuesta

Tu dirección de correo electrónico no será publicada. Los campos obligatorios están marcados con *

A %d blogueros les gusta esto:

Si continuas utilizando este sitio aceptas el uso de cookies. más información

Los ajustes de cookies de esta web están configurados para "permitir cookies" y así ofrecerte la mejor experiencia de navegación posible. Si sigues utilizando esta web sin cambiar tus ajustes de cookies o haces clic en "Aceptar" estarás dando tu consentimiento a esto.

Cerrar