Conceptos Fundamentales de Shell Scripting en Linux

En este artículo, exploraremos varios conceptos y comandos esenciales dentro del entorno de scripting de shell en Linux.

Variables en Shell

Las variables se utilizan para almacenar datos. La sintaxis para definir una variable es:

NOMBRE_VARIABLE="valor" 

Reglas para nombrar variables:

  • No debe haber espacios alrededor del signo igual (=).
  • Los nombres de variables solo pueden contener letras (a-z, A-Z), números (0-9) y guiones bajos (_). El primer carácter no puede ser un número.

Para usar una variable, se antepone un signo de dólar ($) a su nombre. Las llaves {} alrededor del nombre de la variable son opcionales pero recomendables para evitar ambigüedades y seguir buenas prácticas de programación:

echo "${NOMBRE_VARIABLE}" 

Separador de Comandos: Punto y Coma (;)

El punto y coma (;) permite ejecutar múltiples comandos en una sola línea. Cada comando se considera una sentencia independiente.

comando1 ; comando2 ; comando3 

Comando exit y Código de Salida ($?)

El comando exit n finaliza la ejecución del script o shell actual. El argumento n es un código de salida numérico que indica el resultado de la operación. Un valor de 0 generalmente indica éxito, mientras que otros valores indican diferentes tipos de errores.

La variable especial $? contiene el código de salida del último comando ejecutado. Esto es útil para verificar si un comando o script se ejecutó correctamente.

# Ejemplo: Ejecutar un script y verificar su éxito
./script_a.sh
if [ $? -eq 0 ]; then
 echo "Script A ejecutado exitosamente."
else
 echo "Script A falló."
fi

Tubería (Pipe): Símbolo de Barra Vertical (|)

El símbolo de barra vertical (|) se utiliza para conectar la salida estándar de un comando con la entrada estándar de otro comando. Esto permite encadenar comandos para procesar datos de forma secuencial.

comando1 | comando2 

El resultado de comando1 se convierte en la entrada para comando2.

Variable Especial $$

La variable especial $$ contiene el ID del proceso (PID) del shell actual.

echo "El PID de este shell es: $$" 

Comando echo

El comando echo se utiliza para mostrar texto o el contenido de variables en la salida estándar.

# Mostrar una cadena de texto
echo "Este es un mensaje de prueba."

# Mostrar el contenido de una variable (usando $() para la sustitución de comandos)
echo "Fecha y hora actual: $(date +'%Y-%m-%d %H:%M:%S')"

También se puede usar para escribir datos en un archivo, como se muestra en el siguiente ejemplo:

echo "Información adicional" >> log.txt 

Redirección de Entrada/Salida

La redirección permite modificar los flujos de entrada y salida estándar de los comandos.

  • > archivo: Redirige la salida estándar a un archivo. Si el archivo existe, su contenido se sobrescribe. Si no existe, se crea.
  • >> archivo: Redirige la salida estándar a un archivo, añadiendo el contenido al final. Si el archivo no existe, se crea.

El operador > puede usarse para crear un archivo vacío o para vaciar el contenido de un archivo existente:

> archivo_vacio.txt 

Dispositivo Especial /dev/null

/dev/null es un archivo especial en sistemas tipo Unix que actúa como un sumidero (un "agujero negro"). Cualquier dato escrito en él se descarta permanentemente. Es útil para:

  • Eliminar la salida de un comando: Redirigir la salida a /dev/null.
  • Vaciar el contenido de un archivo: Redirigir /dev/null al archivo.
# Descartar la salida de un comando
grep "patron" archivo.log > /dev/null

# Vaciar el contenido de un archivo
cat /dev/null > archivo_a_vaciar.txt

Descriptores de Archivo Estándar (stdin, stdout, stderr)

Los comandos en Linux suelen interactuar con tres flujos de datos predeterminados:

  • Entrada estándar (stdin): Descriptor de archivo 0. Por defecto, se lee desde el teclado.
  • Salida estándar (stdout): Descriptor de archivo 1. Por defecto, se escribe en la consola.
  • Error estándar (stderr): Descriptor de archivo 2. Por defecto, se escriben los mensajes de error en la consola.

Es común redirigir tanto la salida estándar como la salida de error a /dev/null para suprimir toda la información generada por un comando:

# Redirigir stdout (1) a /dev/null y stderr (2) a stdout (que es /dev/null)
ls archivo_inexistente 1> /dev/null 2>&1

Etiquetas: shell linux scripting bash redirección

Publicado el 7-11 02:42