Skip to main content

Command Palette

Search for a command to run...

Shell Scripting con Bash: Básico

Published
•4 min read•View as Markdown

¿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