Saltar al contenido principal

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), y ksh (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
  • 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:
      1. Activa el Subsistema de Windows para Linux en la configuración de Windows o mediante PowerShell:
        wsl --install
      2. Reinicia tu PC y selecciona una distribución de Linux desde Microsoft Store (por ejemplo, Ubuntu).
      3. Una vez instalada la distribución, abre la terminal y Bash estará disponible.

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
  • .profile:
    • Similar a .bash_profile, pero no es específico de Bash y puede ser usado por otros shells.
    • Ubicación: ~/.profile

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:

  • .. para cd ..
  • la para ls -A
  • h para history
  • Verifica que los alias funcionen correctamente.

2.7 Establece las siguientes variables de entorno en tu ~/.bashrc:

  • EDITOR a vim
  • 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.

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.

  • Solución:
    # Verificar la instalación
    bash --version

    # Si no está instalado
    sudo apt-get install bash # Para distribuciones basadas en Debian/Ubuntu
    sudo yum install bash # Para distribuciones basadas en Red Hat/Fedora

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.

  • Solución:
    # Instalar la última versión de Bash
    brew install bash

    # Cambiar el shell predeterminado
    chsh -s /usr/local/bin/bash

2.3 Si estás en Windows, activa el Subsistema Windows para Linux (WSL) e instala una distribución de Linux desde Microsoft Store.

  • Solución:
    # Habilitar WSL
    wsl --install

    # Instalar una distribución de Linux desde Microsoft Store (ejemplo: Ubuntu)

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.

  • Solución:
    # Alias en ~/.bashrc
    alias ll='ls -la'
    alias gs='git status'
    alias gp='git pull'

    # Prompt personalizado
    PS1='\u@\h:\w\$ '

2.5 Asegúrate de que tu ~/.bash_profile carga ~/.bashrc si existe. Si no tienes un ~/.bash_profile, créalo.

  • Solución:
    # Contenido de ~/.bash_profile
    if [ -f ~/.bashrc ]; then
    . ~/.bashrc
    fi

2.6 Crea alias para los siguientes comandos:

  • .. para cd ..
  • la para ls -A
  • h para history
  • Verifica que los alias funcionen correctamente.
  • Solución:
    alias ..='cd ..'
    alias la='ls -A'
    alias h='history'

2.7 Establece las siguientes variables de entorno en tu ~/.bashrc:

  • EDITOR a vim
  • PATH para incluir /usr/local/bin
  • Verifica que las variables de entorno se hayan establecido correctamente.
  • Solución:
    export EDITOR='vim'
    export PATH=$PATH:/usr/local/bin

2.8 Crea una función llamada mkcd que cree un directorio y luego cambie a ese directorio.

  • Solución:
    mkcd() {
    mkdir -p "$1"
    cd "$1"
    }

2.9 Personaliza tu PS1 para que muestre tu nombre de usuario, nombre del host y el directorio de trabajo actual.

  • Solución:
    PS1='\u@\h:\w\$ '

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.

  • Solución:
    PS1='\[\e[32m\]\u\[\e[m\]@\[\e[33m\]\h\[\e[m\]:\[\e[34m\]\w\[\e[m\]\$ '

2.11 Configura tu ~/.bashrc con alias útiles, variables de entorno, una función personalizada y un prompt colorido.

  • Solución:
    # Alias
    alias ll='ls -la'
    alias gs='git status'
    alias gp='git pull'
    alias ..='cd ..'
    alias la='ls -A'
    alias h='history'

    # Variables de entorno
    export EDITOR='vim'
    export PATH=$PATH:/usr/local/bin

    # Función personalizada
    mkcd() {
    mkdir -p "$1"
    cd "$1"
    }

    # Prompt colorido
    PS1='\[\e[32m\]\u\[\e[m\]@\[\e[33m\]\h\[\e[m\]:\[\e[34m\]\w\[\e[m\]\$ '