Módulo 8 - Shells y bash scripting

Shells

  • Función primordial: Interpretar comandos del terminal.

  • Shell predeterminado en Linux: Bash (Bourne Again Shell).

  • Ubicación: Lista de shells disponibles en /etc/shells.

Tipos de Shells

Shell interactivo de inicio de sesión

  • Se abre cuando inicias sesión (SSH, su -l [username]).

  • Ideal para cargar configuraciones del usuario.

Shell interactivo sin inicio de sesión

  • Se abre por defecto, sin credenciales.

  • Útil para administración, mantenimiento y scripts.

Shell no interactivo de inicio de sesión

  • Es poco común.

  • Se utiliza para ejecutar scripts con señales específicas o para redirigir la salida estándar de un comando a la entrada de una conexión SSH.

  • Ejemplo: <comando> | ssh <usuario>@<servidor>.

Algunos comandos

ComandoDescripción
echo $0Muestra el tipo de shell en el que estamos:
-bash ó -su: Shell interactivo de inicio de sesión.
bash ó /bin/bash: Shell interactivo sin inicio de sesión.
bash: Inicia un child shell.
su - [user]Inicia un shell interactivo de inicio de sesión.
su -l [user]Inicia un shell interactivo de inicio de sesión.
su --login [user]Inicia un shell interactivo de inicio de sesión.
su [user]Inicia un shell interactivo sin inicio de sesión.

Terminales: TTY y PTS

Bash

  • Shell por defecto en la mayoría de las distribuciones de Linux.

  • Intérprete de comandos y un lenguaje de scripting.

TTY (Teletype Writer)

  • Terminal nativo de Linuxl.

  • Canal para la entrada y salida estándar de comandos en comunicación con Bash.

PTS,(Pseudo Terminal Slave)

  • Terminal no nativo que emula las funciones del terminal nativo (TTY).

  • Utilizado por herramientas como Screen.

  • Ofrece interfaces de terminal adicionales.

Ejercicio: TTY y PTS

  • Comandos: w o who - Muestran usuarios y terminales activos.

  • Abrir terminal: Ejecutar w para ver TTY por defecto.

  • Iniciar screen: screen -S Test.

  • Verificar: Ejecutar w nuevamente

    • TTY: Primer terminal nativo.
    • PTS: Segundo terminal no nativo (screen).

Entorno de Shell

Archivos importantes de un shell:

ArchivoDescripción
~/.bash_profileConfigura el entorno del usuario y puede crearse manualmente.
~/.bash_loginSe ejecuta solo si no existe ~/.bash_profile. Utilizado para comandos de inicio de sesión como establecer umask.
~/.profileCreado si ~/.bash_profile y ~/.bash_login no existen. Comúnmente usado en Ubuntu.
~/.bash_logoutRealiza tareas de limpieza al finalizar la sesión en el terminal.
~/.bashrcArchivo de configuración del terminal para cada usuario. Permite configuraciones permanentes, como establecer umask.
/etc/bash.bashrcArchivo de configuración global para todos los terminales del sistema, afectando a todas las sesiones de Bash con configuraciones y variables de entorno globales.
  • Jerarquía: si falta .bash_profile, se busca .bash_login, luego .profile.

Alias del sistema

  • Nombres sustitutos para comandos largos y complejos.

  • Facilitan la ejecución de comandos frecuentes.

*Ejemplos: *

  • alias IP=ifconfig: Crea un alias para el comando ifconfig, de manera que al ejecutar "IP", se obtiene el mismo resultado que con ifconfig.

  • alias logs='sudo tail -n 5 /var/log/syslog': Crea un alias para ver las últimas 5 líneas del archivo de registro del sistema.

**Notas Importantes: **

  • Los alias se eliminan al cerrar el terminal.

  • Para que los alias sean permanentes, deben agregarse al archivo ~/.bashrc y luego ejecutar source ~/.bashrc para recargar el archivo.

Comandos

ComandoDescripción
aliasLista todos los alias creados en el sistema.
unaliasElimina un alias del sistema. Ejemplo: unalias IP.

Variables del sistema

¿Qué es una Variable?

  • Una variable es un espacio en memoria para almacenar datos (numéricos o de texto).

  • Las variables pueden cambiar su contenido o valor.

  • En contraste, las constantes también almacenan valores, pero estos nunca cambian.

  • Ejemplo: variable=linux: Crea una variable llamada "variable" y le asigna el valor "linux".

Variable Referenciada

  • Proceso de leer el valor de una variable.

  • Ejemplo: echo $variable. Utiliza echo para mostrar en pantalla el valor de la variable variable.

Asignación de variables

  • Otorgar valor durante o después de creación.

  • Ejemplo: variable=lpic-1. Asigna el valor lpic-1 a la variable variable.

Tipos de variables: Locales y de entorno

Variables Locales

  • También llamadas variables de shell.

  • Existen solo en el terminal donde se crean

  • Por convención, se escriben en minúscula.

  • No funcionan en shells diferentes al que fueron creadas.

  • Ejemplo: linux=shell. Crea una variable local llamada linux con el valor shell.

Variables de Entorno

  • También conocidas como variables globales.

  • Pueden ser utilizadas en cualquier terminal, incluyendo terminales diferentes al de origen y shells secundarios (child shells).

  • Se escriben en mayúsculas para diferenciarlas de las variables locales.

  • Ejemplo: SHELL=linux. Crea una variable de entorno llamada SHELL con el valor linux.

Comandos

ComandoDescripción
readonly [var-name]Convierte una variable en inmutable (no se puede cambiar su valor). Ejemplo: readonly linux
readonly -pMuestra todas las variables inmutables.
setMuestra los nombres y valores de las variables del shell actual.
exportConvierte una variable local en global. Ejemplo: export linux|declare -x Linux
export -nConvierte una variable global en local. Debe ejecutarse desde el shell de origen donde se creó la variable. Ejemplo: export -n Linux
export -pEnlista todas las variables que fueron convertidas a globales.
printenv/envMuestran todas las variables globales del sistema.
env -i bashInicia un terminal con únicamente las variables básicas.

Variables de entorno comunes

VariableDescripción
HISTFILEAlmacena el archivo /home/username/.bash_history, donde se guarda el historial de todos los comandos ejecutados. Se puede visualizar con history.
HISTCONTROLControla qué comandos se almacenan en HISTFILE.
ignorespace: No guarda comandos que comienzan con un espacio.
ignoredups: No guarda comandos duplicados consecutivos.
ignoreboth: Combina ignorespace e ignoredups.
HISTSIZEEstablece el número de comandos que se deben guardar en memoria durante la sesión actual.
HISTFILESIZEEstablece el número de comandos que se deben guardar en HISTFILE.

Otras Variables de Entorno

VariableDescripción
HOMEAlmacena la ruta absoluta del directorio principal del usuario actual.
HOSTNAMEAlmacena el nombre de la computadora en la red.
HOSTTYPEAlmacena la arquitectura de la computadora.
PATHAlmacena las ubicaciones donde bash busca los archivos ejecutables cuando son llamados en el shell.

Aspectos básicos de un script

**¿Qué es un shell script? **

  • Un shell script es un archivo con varios comandos ejecutados continuamente.

  • Su principal objetivo es automatizar tareas.

¿Qué tiene que cumplir?

  • Contener instrucciones que entienda el intérprete (Bash).

  • Usar sintaxis correcta de comandos, variables y estructuras.

  • Ser un archivo con permisos de ejecución

Comandos Básicos

ComandoDescripción
#!/bin/bashEspecifica el intérprete que se utilizará para ejecutar el script.
echoMuestra en pantalla una cadena de texto. Es una salida estándar.
readCaptura la entrada de un valor usando una variable para ser procesada en el script.
echo ""Sin contenido entre comillas, muestra una línea en blanco o un salto de línea.
read -sPermite que la entrada capturada en una variable no sea visible. Se usa comúnmente con contraseñas.

Formas de ejecutar scripts

ComandoDescripción
./script-name.shEjecuta el script directamente si tiene permisos de ejecución.
bash script-name.shEjecuta el script utilizando el intérprete de Bash especificado en la primera línea del script.

Comentarios en Bash scripting

Built with LogoFlowershow