Módulo 8 - Shells y bash scripting
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
| Comando | Descripción |
|---|---|
echo $0 | Muestra 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:
wowho- Muestran usuarios y terminales activos. -
Abrir terminal: Ejecutar
wpara ver TTY por defecto. -
Iniciar screen:
screen -S Test. -
Verificar: Ejecutar
wnuevamente- TTY: Primer terminal nativo.
- PTS: Segundo terminal no nativo (screen).
Entorno de Shell
Archivos importantes de un shell:
| Archivo | Descripción |
|---|---|
~/.bash_profile | Configura el entorno del usuario y puede crearse manualmente. |
~/.bash_login | Se ejecuta solo si no existe ~/.bash_profile. Utilizado para comandos de inicio de sesión como establecer umask. |
~/.profile | Creado si ~/.bash_profile y ~/.bash_login no existen. Comúnmente usado en Ubuntu. |
~/.bash_logout | Realiza tareas de limpieza al finalizar la sesión en el terminal. |
~/.bashrc | Archivo de configuración del terminal para cada usuario. Permite configuraciones permanentes, como establecer umask. |
/etc/bash.bashrc | Archivo 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 comandoifconfig, de manera que al ejecutar "IP", se obtiene el mismo resultado que conifconfig. -
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
~/.bashrcy luego ejecutarsource ~/.bashrcpara recargar el archivo.
Comandos
| Comando | Descripción |
|---|---|
alias | Lista todos los alias creados en el sistema. |
unalias | Elimina 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. Utilizaechopara mostrar en pantalla el valor de la variablevariable.
Asignación de variables
-
Otorgar valor durante o después de creación.
-
Ejemplo:
variable=lpic-1. Asigna el valorlpic-1a la variablevariable.
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 llamadalinuxcon el valorshell.
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 llamadaSHELLcon el valorlinux.
Comandos
| Comando | Descripción |
|---|---|
readonly [var-name] | Convierte una variable en inmutable (no se puede cambiar su valor). Ejemplo: readonly linux |
readonly -p | Muestra todas las variables inmutables. |
set | Muestra los nombres y valores de las variables del shell actual. |
export | Convierte una variable local en global. Ejemplo: export linux|declare -x Linux |
export -n | Convierte una variable global en local. Debe ejecutarse desde el shell de origen donde se creó la variable. Ejemplo: export -n Linux |
export -p | Enlista todas las variables que fueron convertidas a globales. |
printenv/env | Muestran todas las variables globales del sistema. |
env -i bash | Inicia un terminal con únicamente las variables básicas. |
Variables de entorno comunes
| Variable | Descripción |
|---|---|
HISTFILE | Almacena el archivo /home/username/.bash_history, donde se guarda el historial de todos los comandos ejecutados. Se puede visualizar con history. |
HISTCONTROL | Controla 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. |
HISTSIZE | Establece el número de comandos que se deben guardar en memoria durante la sesión actual. |
HISTFILESIZE | Establece el número de comandos que se deben guardar en HISTFILE. |
Otras Variables de Entorno
| Variable | Descripción |
|---|---|
HOME | Almacena la ruta absoluta del directorio principal del usuario actual. |
HOSTNAME | Almacena el nombre de la computadora en la red. |
HOSTTYPE | Almacena la arquitectura de la computadora. |
PATH | Almacena 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
| Comando | Descripción |
|---|---|
#!/bin/bash | Especifica el intérprete que se utilizará para ejecutar el script. |
echo | Muestra en pantalla una cadena de texto. Es una salida estándar. |
read | Captura 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 -s | Permite que la entrada capturada en una variable no sea visible. Se usa comúnmente con contraseñas. |
Formas de ejecutar scripts
| Comando | Descripción |
|---|---|
./script-name.sh | Ejecuta el script directamente si tiene permisos de ejecución. |
bash script-name.sh | Ejecuta el script utilizando el intérprete de Bash especificado en la primera línea del script. |
Comentarios en Bash scripting