Shells y Scripts
Domina el entorno de shell, personaliza tu experiencia y aprende a escribir scripts para automatizar tareas en Linux.
105.1 Personalizar y usar el entorno de shell
La shell es una interfaz poderosa entre el usuario y el kernel en Linux. Personalizarla te ayuda a trabajar de forma más eficiente.
Archivos de configuración de la shell
Los archivos de configuración globales están en /etc, mientras que los locales están en el directorio personal del usuario.
- Configuración global:
/etc/profile: Define variables globales comoPATHoPS1para sesiones de login./etc/profile.d/: Directorio con scripts ejecutados por/etc/profile./etc/bash.bashrc: Configuración para shells interactivos no-login. Establece variables, verifica el tamaño de la ventana, etc.
- Configuración local:
~/.bash_profile: Configura el entorno del usuario al iniciar una sesión de login.~/.bash_login: Se ejecuta si no existe.bash_profile.~/.profile: Se usa si no hay.bash_profileni.bash_login. Verifica si el shell es bash y carga.bashrc.~/.bashrc: Similar a/etc/bash.bashrc. Almacena alias y funciones específicas del usuario.~/.bash_logout: Ejecuta tareas de limpieza al cerrar una sesión de login.
- Ejecutar archivos:
.(punto): Ejecuta un archivo en el entorno actual. Ejemplo:. ~/.bashrc.source: Similar al operador.. Ejemplo:source ~/.bashrc.
- SKEL: Variable definida en
/etc/adduser.conf. Apunta a un directorio plantilla para nuevos usuarios.
Variables
Las variables son nombres que contienen valores. Pueden incluir letras, números y guiones, pero no empezar por números ni contener espacios.
- Definir y mostrar:
- Ejemplo:
distro=zorinos, verifica conecho $distro. - Con espacios:
distro="zorin 12.4". - Comillas simples (literales):
animal='My $lizard'→My $lizard. - Comillas dobles (sustitución):
animal="My $lizard"→My uromastyx(silizard=uromastyx).
- Ejemplo:
- Tipos de variables:
- Locales: Solo en el shell actual, en minúsculas.
- Globales (entorno): Persisten en la sesión, en mayúsculas.
- Comandos relacionados:
set: Muestra todas las variables y funciones asignadas (locales y de entorno).unset: Elimina una variable. Ejemplo:unset distro.export: Convierte una variable local en global, haciéndola visible en subshells. Ejemplo:export VARIABLE.envyprintenv: Listan exclusivamente las variables de entorno.envtambién puede modificar el entorno al ejecutar un programa.
- Variables especiales:
$$: Contiene el PID del shell actual.$?: Almacena el código de salida del último comando ejecutado.
- Variables comunes:
DISPLAY: Hostname y pantalla (echo $DISPLAY : :0).HOME: Directorio personal (echo $HOME : /home/sysriser).HOSTNAME: Nombre del equipo (echo $HOSTNAME : debian).LANG: Localización (echo $LANG : es_ES.UTF-8).LD_LIBRARY_PATH: Directorios para bibliotecas (echo $LD_LIBRARY_PATH : /usr/local/lib).MAIL: Archivo de correo (echo $MAIL : /var/mail/sysriser).PATH: Directorios para ejecutables (echo $PATH : /usr/local/bin:/usr/bin:/bin).PS1: Define el prompt de bash.SHELL: Ruta del shell actual (echo $SHELL : /bin/bash).USER: Nombre del usuario (echo $USER : sysriser).
Alias y funciones
Los alias y funciones simplifican comandos repetitivos en el shell.
- Alias: Sustituto de un comando. Usamos comillas si contiene parámetros o espacios.
- Ejemplo:alias ll="ls -la".
- Dinámico (comillas simples):alias where?='echo $PWD'(cambia con el directorio).
- Estático (comillas dobles):alias where?="echo $PWD"(valor fijo).
- Listar todos:aliassin parámetros.
- Eliminar:unalias nombre. - Funciones: Más flexibles que los alias.
# 1. Mediante la palabra function function miFuncion() { echo "Hola $1" } # 2. Mediante los símbolos () miFuncion() { echo "Hola $1" }
105.2 Personalizar y escribir scripts sencillos
Un script es una lista de comandos que un programa, como el intérprete de comandos bash, ejecuta en un orden específico. Personalizarlos te permite automatizar tareas de manera eficiente en Linux.
Estructura y ejecución del script
La primera línea, conocida como shebang (ej. #!/bin/bash), indica qué intérprete debe usarse. El archivo debe ser ejecutable con chmod +x nombre_script.sh.
- Uso de
echo: Muestra texto. Por defecto añade salto de línea, con-nlo evita.
- Ejemplo:echo -n "Hola, "; echo "mundo"→Hola, mundo. - Múltiples comandos en una línea: Separador
;.
- Ejemplo:echo "La hora es: "; date +%H:%M. - Comando
read: Recoge datos ingresados por el usuario en una variable.
- Ejemplo:read nombre; echo "Hola $nombre". - Comando
seq: Genera secuencias numéricas.
- Básico:seq 10→ 1 al 10.
- Con incremento:seq 1 5 20→ 1, 6, 11, 16.
Variables especiales en scripts
$*y$@: Todos los argumentos pasados al script.$#: Cantidad total de argumentos pasados.$0: Nombre del script en ejecución.$$: ID del proceso actual del script.$?: Código de salida del último comando (0 éxito).
Expresiones aritméticas
expr:SUM=`expr 5 + 3`.$(( )):result=$((5 * 3)).- Comparadores:
-eq(igual),-ne(no igual),-lt(menor),-gt(mayor).
Ejecución condicional
Basada en el código de estado (0 éxito, != 0 error).
- Operadores lógicos:
&&: Ejecuta derecha si izquierda es éxito.
[ -f archivo ] && echo "Existe".||: Ejecuta derecha si izquierda falla.
- Estructura
if:if [ -f "/etc/passwd" ]; then echo "El archivo existe" fi - Estructura
case:case $1 in start) echo "Iniciando..." ;; stop) echo "Deteniendo..." ;; *) echo "Uso: $0 {start|stop}" ;; esac
Pruebas ampliadas
- Texto:
=/==(igual),!=(desigual),-z(vacío). - Número:
-eq,-ne,-lt,-gt,-le,-ge. - Archivos:
-f(archivo regular),-d(directorio).
Construcciones de bucle
for:for i in $(seq 1 5); do echo "Iteración $i" donewhile:counter=1 while [ $counter -le 5 ]; do echo "Contador: $counter" counter=$((counter+1)) doneuntil:counter=1 until [ $counter -gt 5 ]; do echo "Contador: $counter" counter=$((counter+1)) done
Captura de salida: fecha=$(date) almacena la salida en la variable.