1. Introducción a Bash
Historia y Evolución de Bash
- Origen de Unix y el shell:
- Unix se desarrolló en AT&T Bell Labs a finales de los años 60. Originalmente, los usuarios interactuaban con Unix a través del shell de Thompson, que fue uno de los primeros shells.
- En los años 70, se creó el Bourne shell (
sh
) por Stephen Bourne, que se convirtió en el shell estándar de Unix.
- Nacimiento de Bash:
- Bash (Bourne Again Shell) fue creado por Brian Fox para el Proyecto GNU como un reemplazo libre para el Bourne shell, y se lanzó por primera vez en 1989.
- Bash combina características de
sh
,csh
(C shell), yksh
(Korn shell), proporcionando una funcionalidad rica y mejorada.
- Evolución y versiones:
- Desde su lanzamiento, Bash ha pasado por varias versiones, añadiendo características y mejoras de rendimiento. La versión actual (a la fecha de corte de mi conocimiento) es Bash 5.1.
- Bash es ahora el shell por defecto en la mayoría de las distribuciones de Linux y macOS, y está disponible en Windows a través del subsistema Windows para Linux (WSL).
Instalación y Configuración de Bash
Instalación en Diferentes Sistemas Operativos
- Linux:
- Bash generalmente viene preinstalado en casi todas las distribuciones de Linux. Puedes verificar la versión instalada usando
bash --version
. - Para instalar o actualizar Bash, puedes usar el gestor de paquetes de tu distribución. Por ejemplo, en Ubuntu/Debian:
sudo apt update
sudo apt install bash
- Bash generalmente viene preinstalado en casi todas las distribuciones de Linux. Puedes verificar la versión instalada usando
- macOS:
- macOS también incluye Bash de forma predeterminada, aunque podría no ser la versión más reciente debido a las restricciones de la licencia GPLv3.
- Para instalar la última versión de Bash, puedes usar Homebrew:
brew install bash
- Para cambiar el shell predeterminado a la versión instalada por Homebrew:
sudo chsh -s /usr/local/bin/bash
- Windows:
- En Windows, puedes usar Bash a través del Subsistema Windows para Linux (WSL). Para instalar WSL y Bash:
- Activa el Subsistema de Windows para Linux en la configuración de Windows o mediante PowerShell:
wsl --install
- Reinicia tu PC y selecciona una distribución de Linux desde Microsoft Store (por ejemplo, Ubuntu).
- Una vez instalada la distribución, abre la terminal y Bash estará disponible.
- Activa el Subsistema de Windows para Linux en la configuración de Windows o mediante PowerShell:
- En Windows, puedes usar Bash a través del Subsistema Windows para Linux (WSL). Para instalar WSL y Bash:
Personalización del Entorno Bash
Archivos de Configuración
- .bashrc:
- Este archivo se ejecuta para shells interactivos no de inicio. Es ideal para configuraciones específicas del usuario, alias y funciones.
- Ubicación:
~/.bashrc
- Ejemplo:
# Alias
alias ll='ls -la'
# Prompt personalizado
PS1='\u@\h:\w\$ '
- .bash_profile y .bash_login:
- Estos archivos se ejecutan para shells de inicio (login shells).
~/.bash_profile
tiene prioridad sobre~/.bash_login
. - Ubicación:
~/.bash_profile
o~/.bash_login
- Ejemplo:
# Cargar .bashrc si existe
if [ -f ~/.bashrc ]; then
source ~/.bashrc
fi
- Estos archivos se ejecutan para shells de inicio (login shells).
- .profile:
- Similar a
.bash_profile
, pero no es específico de Bash y puede ser usado por otros shells. - Ubicación:
~/.profile
- Similar a
Configuración de Alias, Variables y Funciones
- Alias:
- Definición de comandos cortos para comandos más largos.
- Ejemplo:
alias gs='git status'
alias ga='git add'
alias gc='git commit -m'
- Variables de entorno:
- Configuración de variables que afectan al comportamiento del shell y programas.
- Ejemplo:
export EDITOR=vim
export PATH=$PATH:/usr/local/bin
- Funciones:
- Definición de funciones personalizadas para tareas repetitivas.
- Ejemplo:
mkcd() {
mkdir -p "$1"
cd "$1"
}
Personalización del Prompt (PS1)
- Variables de Prompt:
PS1
es la variable que define el prompt principal del shell.- Ejemplo básico:
PS1='\u@\h:\w\$ '
- Ejemplo avanzado con colores:
PS1='\[\e[32m\]\u@\h\[\e[0m\]:\[\e[34m\]\w\[\e[0m\]\$ '
- Variables comunes en PS1:
\u
: Nombre de usuario\h
: Nombre del host\w
: Directorio de trabajo actual
Ejemplos de Configuraciones Avanzadas
- Archivo
.bashrc
Avanzado:# Alias útiles
alias ll='ls -la'
alias gs='git status'
alias gp='git pull'
# Variables de entorno
export EDITOR=vim
export PATH=$PATH:/usr/local/bin
# Funciones
mkcd() {
mkdir -p "$1"
cd "$1"
}
# Prompt personalizado
PS1='\[\e[32m\]\u@\h\[\e[0m\]:\[\e[34m\]\w\[\e[0m\]\$ '
# Cargar nvm (Node Version Manager) si existe
if [ -s "$HOME/.nvm/nvm.sh" ]; then
source "$HOME/.nvm/nvm.sh"
fi
Ejercicios de Introducción a Bash
Ejercicio 1: Historia y Evolución de Bash
1.1 Investiga las diferencias entre el Bourne shell (sh
) y Bash. Escribe un breve resumen destacando al menos cinco diferencias clave.
1.2 Verifica la versión de Bash instalada en tu sistema utilizando el comando apropiado.
1.3 Escribe un breve resumen de las características nuevas que se introdujeron en tu versión actual de Bash (puedes buscar en la documentación oficial de Bash).
Ejercicio 2: Instalación y Configuración de Bash
2.1 Verifica si Bash está instalado en tu sistema Linux. Si no está instalado, instálalo usando el gestor de paquetes de tu distribución.
2.2 Si estás en macOS, instala la última versión de Bash usando Homebrew. Cambia el shell predeterminado a la versión recién instalada.
2.3 Si estás en Windows, activa el Subsistema Windows para Linux (WSL) e instala una distribución de Linux desde Microsoft Store.
2.4 Crea o modifica tu archivo ~/.bashrc
para incluir al menos tres alias nuevos y un prompt personalizado que incluya tu nombre de usuario y el directorio actual.
2.5 Asegúrate de que tu ~/.bash_profile
carga ~/.bashrc
si existe. Si no tienes un ~/.bash_profile
, créalo.
2.6 Crea alias para los siguientes comandos:
..
paracd ..
la
parals -A
h
parahistory
- Verifica que los alias funcionen correctamente.
2.7 Establece las siguientes variables de entorno en tu ~/.bashrc
:
EDITOR
avim
PATH
para incluir/usr/local/bin
- Verifica que las variables de entorno se hayan establecido correctamente.
2.8 Crea una función llamada mkcd
que cree un directorio y luego cambie a ese directorio.
2.9 Personaliza tu PS1
para que muestre tu nombre de usuario, nombre del host y el directorio de trabajo actual.
2.10 Personaliza tu PS1
para que el nombre de usuario aparezca en verde, el nombre del host en amarillo y el directorio de trabajo en azul.
2.11 Configura tu ~/.bashrc
con alias útiles, variables de entorno, una función personalizada y un prompt colorido.
Ejercicios con soluciones de Introducción a Bash
Ejercicio 1: Historia y Evolución de Bash
1.1 Investiga las diferencias entre el Bourne shell (sh
) y Bash. Escribe un breve resumen destacando al menos cinco diferencias clave.
- Solución:
- `sh` es el Bourne shell original, mientras que Bash es el Bourne Again Shell, una versión mejorada de `sh`.
- Bash tiene mejoras en la funcionalidad de scripting, como la adición de arreglos y programación de funciones.
- Bash incluye características de otros shells, como la historia de comandos de `csh` y la edición de línea de comandos de `ksh`.
- Bash soporta expansiones como `!!` para el último comando y `!$` para el último argumento.
- Bash tiene mejoras en la personalización del prompt y características interactivas más avanzadas.
1.2 Verifica la versión de Bash instalada en tu sistema utilizando el comando apropiado.
- Solución:
bash --version
1.3 Escribe un breve resumen de las características nuevas que se introdujeron en tu versión actual de Bash (puedes buscar en la documentación oficial de Bash).
- Solución:
- Las nuevas características en Bash 5.0 incluyen mejoras en la expansión de nombres de archivos, variables nuevas para el historial de comandos y soporte mejorado para scripts multi-thread.
- Se han agregado nuevas opciones de configuración y parámetros personalizados.
- Mejoras en el manejo de señales y manejo de errores en scripts.