Apuntes bash

No es un bug, es una característica del shell.

Scripting en Bash: Introducción

¿Qué es un script de Bash?

Un script de Bash es un archivo de texto que contiene una serie de comandos de Bash (Bourne Again Shell) que se ejecutan secuencialmente. Los scripts permiten automatizar tareas, combinar comandos y crear programas sencillos para interactuar con el sistema operativo. Son útiles para:

  • Automatizar tareas repetitivas, como copias de seguridad o procesamiento de archivos.
  • Ejecutar secuencias de comandos en una sola ejecución.
  • Personalizar el comportamiento del sistema usando variables, condicionales y bucles.

La primera línea: #!/bin/bash

La primera línea de un script de Bash, conocida como shebang, especifica qué intérprete debe ejecutar el script. Para Bash, se usa #!/bin/bash. Esta línea asegura que el sistema use el shell Bash, independientemente del shell actual del usuario.

Ejemplo de un script básico:


#!/bin/bash
echo "Hola, mundo!"

Nota: El shebang debe ser la primera línea del archivo, sin espacios ni líneas en blanco antes.

Hacer un script ejecutable

Para ejecutar un script de Bash directamente (sin invocar bash script.sh), debes hacerlo ejecutable usando el comando chmod +x. Esto otorga permisos de ejecución al archivo.

Ejemplo:


# Crear un script
echo '#!/bin/bash' > mi_script.sh
echo 'echo "Este es mi script"' >> mi_script.sh
# Hacerlo ejecutable
chmod +x mi_script.sh
# Ejecutarlo
./mi_script.sh

Nota: El prefijo ./ es necesario si el script no está en un directorio incluido en la variable PATH.

Comentarios en scripts

Los comentarios son líneas que el intérprete ignora, usadas para documentar el código. En Bash, los comentarios comienzan con # y continúan hasta el final de la línea.

Ejemplo:


#!/bin/bash
# Este es un comentario que explica el script
echo "Este texto se muestra"  # Esto es un comentario en línea
# Las siguientes líneas están comentadas y no se ejecutan
# echo "Esto no se muestra"

Usa comentarios para aclarar el propósito de los comandos o para desactivar temporalmente partes del script.

Mostrar salida y escribir en archivos con echo

El comando echo se usa principalmente para mostrar texto en la consola, pero también puede redirigir texto a archivos usando operadores como > (sobrescribe el archivo) o >> (añade al archivo). Es útil para proporcionar información al usuario, depurar scripts o crear/actualizar archivos.

Ejemplo de salida en consola:


#!/bin/bash
# Mostrar un mensaje simple
echo "Bienvenido al script"
# Mostrar una variable
NOMBRE="Usuario"
echo "Hola, $NOMBRE"
# Mostrar el resultado de un comando
echo "El directorio actual es: $(pwd)"

Ejemplo de escritura en archivos:


#!/bin/bash
# Crear o sobrescribir un archivo
echo "Este es un nuevo archivo" > salida.txt
# Añadir texto a un archivo existente
echo "Línea adicional" >> salida.txt
# Ver el contenido del archivo
cat salida.txt

Opciones útiles de echo:

  • -n: Evita añadir un salto de línea al final.
  • -e: Habilita la interpretación de secuencias de escape (por ejemplo, \n para salto de línea).

Ejemplo con opciones:


echo -n "Escribe algo: "
read RESPUESTA
echo -e "Tu respuesta fue:\n$RESPUESTA" > respuesta.txt
cat respuesta.txt

El comando source

El comando source (o su equivalente, el operador .) ejecuta un script de Bash en el entorno actual del shell, en lugar de en un nuevo proceso. Esto permite que los cambios en variables de entorno, alias o funciones se apliquen a la sesión actual de la terminal.

Ejemplo:


# Crear un script con una variable
echo 'export MI_VARIABLE="Hola desde el script"' > config.sh
# Usar source para aplicar los cambios en la sesión actual
source config.sh
echo $MI_VARIABLE  # Muestra "Hola desde el script"

Si ejecutas el script sin source (por ejemplo, bash config.sh), los cambios no afectan la sesión actual:


bash config.sh
echo $MI_VARIABLE  # No muestra nada, porque se ejecutó en un nuevo proceso

Uso común: source se usa para cargar configuraciones de archivos como ~/.bashrc después de editarlos:


# Editar .bashrc para añadir una variable
echo 'export MI_VARIABLE="Valor permanente"' >> ~/.bashrc
# Aplicar los cambios
source ~/.bashrc
TOP