Principios de bash scripting

...

Introducción

Un script de bash es un archivo de texto con una secuencia de comandos que se ejecutan de forma automática. Permite automatizar tareas repetitivas, gestionar usuarios, hacer copias de seguridad, etc.

Estructura básica de un script

Todo script comienza con el shebang, que indica qué intérprete usar.


#!/bin/bash

echo "Hola, mundo"
      

Para ejecutarlo:


$ chmod +x script.sh
$ ./script.sh
      

Variables


#!/bin/bash

NOMBRE="Juan"
echo "Hola, $NOMBRE"
      
  • No se usa espacio alrededor del =
  • Para usar la variable se antepone $
  • $1, $2... → argumentos pasados al script
  • $# → número de argumentos
  • $0 → nombre del script

Condicionales


#!/bin/bash

if [ "$1" = "root" ]; then
  echo "Eres root"
elif [ "$1" = "admin" ]; then
  echo "Eres admin"
else
  echo "Usuario normal"
fi
      

Operadores de comparación comunes:

  • -eq → igual (numérico)
  • -ne → distinto (numérico)
  • -lt → menor que
  • -gt → mayor que
  • = → igual (cadena de texto)
  • != → distinto (cadena de texto)
  • -f → es un fichero
  • -d → es un directorio
  • -z → cadena vacía

Bucles

Bucle for:


#!/bin/bash

for i in 1 2 3 4 5; do
  echo "Iteración $i"
done
      

Bucle while:


#!/bin/bash

CONTADOR=0
while [ $CONTADOR -lt 5 ]; do
  echo "Contador: $CONTADOR"
  CONTADOR=$((CONTADOR + 1))
done
      

Funciones


#!/bin/bash

saludar() {
  echo "Hola, $1"
}

saludar "Juan"
saludar "Ana"
      

Las funciones se definen antes de ser llamadas y reciben argumentos igual que el script ($1, $2...).

Ejemplo práctico

Script que crea un usuario y le asigna contraseña:


#!/bin/bash

USUARIO=$1
PASSWORD=$2

if [ -z "$USUARIO" ] || [ -z "$PASSWORD" ]; then
  echo "Uso: $0 usuario contraseña"
  exit 1
fi

useradd -m "$USUARIO"
echo "$USUARIO:$PASSWORD" | chpasswd
echo "Usuario $USUARIO creado correctamente"
      

Se ejecutaría así:


# ./crear_usuario.sh juan MiPassword123
      

Fundamentos de automatización con scripts en bash.

Identificación y gestión de discos: lsblk, blkid, hdparm, smartctl

Índice de la sección

Índice del curso