Skip to main content

Command Palette

Search for a command to run...

Shell Scripting con Bash: Básico

Published
4 min read

¿Qué es un Shell Script?

Un shell script es una serie de comandos organizados dentro de un archivo para automatizar tareas en sistemas Unix/Linux. En lugar de escribir comandos manualmente en la terminal (interactive mode), se pueden agrupar en un archivo y ejecutarlos como un programa (non-interactive mode).


Interactive Mode vs. Non-Interactive Mode

Un shell interactivo permite ejecutar comandos directamente en la terminal. En cambio, un shell script opera en non-interactive mode, ejecutando comandos sin la necesidad de intervención del usuario.

Ejemplo:

#!/bin/bash
cat << EOF
# Shellscripting with bash
# A shell script is a series of commands cleverly organized and put together in a file to accomplish automation
######################################
#INTERACTIVE Vs NOT INTERACTIVE SHELL#
######################################
# A shell script is a NON-INTERACTIVE way to interact with the shell.
# Typing commands directly on the terminal is an INTERACTIVE way
EOF

echo "my ps1 var is ${PS1}"   # Environment Variable para definir el formato del prompt

Salida esperada:

my ps1 var is \s-\v\$

Nota: Puede imprimir vacío en un script, ya que PS1 solo se usa en modo interactivo.


Terminología Importante

  • Shell: Programa que procesa comandos y devuelve un resultado.

  • CLI (Command Line Interface): Interfaz de línea de comandos.

  • Terminal: Programa que permite la interacción con el shell.

  • TTY (TeleType Writer): Dispositivo histórico de entrada/salida que hoy en día representa una sesión de terminal.

  • POSIX: Conjunto de estándares para compatibilidad entre sistemas operativos, incluyendo shells de comandos.


Variables y Expansión en Bash

En Bash, las variables pueden expandirse utilizando $ y {}.

Ejemplo:

#!/bin/bash
var="value of var"
echo ${var}      # Uso correcto con curly brackets
echo $var        # Sin curly brackets

Salida esperada:

value of var
value of var

Ejemplo de error al expandir variables:

height=170
echo "Your height is = $heightcm"  # Incorrecto: no existe 'heightcm'

Corrección usando curly brackets {}:

echo "Your height is = ${height}cm"  # Correcto

Salida esperada:

Your height is = 170cm

Uso de IFS en Bash

IFS (Internal Field Separator) es la variable especial que define los caracteres usados para separar palabras en Bash.

Ejemplo sin comillas dobles:

#!/bin/bash
string="One Two Three"
for element in ${string}; do
    echo ${element}
done

Salida esperada:

One
Two
Three

Ejemplo con comillas dobles:

#!/bin/bash
string="One Two Three"
for element in "${string}"; do
    echo ${element}
done

Salida esperada:

One Two Three

Uso de Readonly Variables en Bash

Las variables de solo lectura no pueden ser modificadas después de su inicialización.

Ejemplo:

#!/bin/bash
readonly SERVERS="server1 server2 server3"
for server in ${SERVERS}; do
    echo "${server}.domain.com"
done

Salida esperada:

server1.domain.com
server2.domain.com
server3.domain.com

Preguntas Frecuentes

¿Por qué es recomendable rodear las variables con curly braces {}?

Usar {} alrededor de una variable en Bash evita ambigüedades y asegura una correcta expansión. Ejemplo:

echo "Mi número es ${num}USD"

Sin los {}, el shell podría interpretar incorrectamente la variable y concatenarla con otros caracteres.

¿Qué significa seguir una convención de codificación?

Significa respetar reglas de estilo para escribir código limpio, mantenible y comprensible. Estas reglas incluyen nombres de variables, formato de funciones, indentación y organización del código.

¿Por qué es recomendable expandir variables usando double quotes ""?

Usar double quotes ("") impide que los valores se dividan en múltiples elementos debido a espacios o caracteres especiales. Ejemplo:

file_path="/mi carpeta/archivo.txt"
echo "$file_path"  # Correcto

Sin comillas dobles:

echo $file_path  # Incorrecto, se dividiría en palabras separadas

¿Qué carácter se recomienda para separar palabras en variables o funciones?

El guion bajo _ es el carácter recomendado. Ejemplo:

user_name="John Doe"
calculate_area() {
    echo "Área calculada"
}

¿Qué es un non-interactive shell?

Un non-interactive shell es un entorno donde se ejecutan comandos mediante un script o redirección de entrada, sin interacción manual en la terminal.

¿Cuáles nombres de funciones son aceptables según las convenciones de codificación?

Los siguientes nombres cumplen con las convenciones:

calculate_area() {}
clone_repo() {}

El nombre SUM_NUMBERS() no es recomendable porque usa mayúsculas, lo cual suele reservarse para constantes.

El nombre my_function() tampoco es recomendable porque es demasiado genérico y no describe claramente la funcionalidad de la función.

Shell Scripting

Part 1 of 1

More from this blog

nietOS

12 posts