Inicio > Cursos > Linux & Terminal > Bash Scripting Avanzado
Linux & TerminalAdministracion AvanzadaLección 11 de 12

Bash Scripting Avanzado

Bash es el lenguaje de la terminal de Linux. Un script de Bash es un archivo con comandos que se ejecutan uno tras otro, así puedes automatizar tareas repetitivas: hacer copias de seguridad, renombrar cientos de archivos, desplegar un proyecto.

Lo que usarás: variables (nombre="Ana" y luego $nombre), condicionales (if), bucles (for, while) y funciones. La primera línea, #!/bin/bash, le dice al sistema que use Bash para ejecutar el archivo. Para correrlo: chmod +x script.sh y luego ./script.sh.

#!/bin/bash
# VARIABLES Y PARAMETROS

NOMBRE="servidor-prod"
PUERTO=3000
FECHA=$(date +%Y-%m-%d)  # Sustitucion de comandos

# Argumentos del script: $1, $2, ..., $# (total), $@ (todos)
echo "Script: $0"
echo "Argumento 1: $1"
echo "Total argumentos: $#"

# Valores por defecto
ENTORNO=${1:-"development"}  # Si $1 esta vacio, usa "development"
LOG_DIR=${LOG_DIR:-"/var/log/mi-app"}

# ARRAYS
SERVIDORES=("web-01" "web-02" "db-01")
echo "Primer servidor: ${SERVIDORES[0]}"
echo "Todos: ${SERVIDORES[@]}"
echo "Total: ${#SERVIDORES[@]}"

# Agregar elemento
SERVIDORES+=("cache-01")

# Iterar array
for srv in "${SERVIDORES[@]}"; do
    echo "Verificando $srv..."
done
#!/bin/bash
# CONDICIONALES

# if con operadores de archivo
if [ -f "/etc/nginx/nginx.conf" ]; then
    echo "Nginx esta instalado"
elif [ -f "/etc/apache2/apache2.conf" ]; then
    echo "Apache esta instalado"
else
    echo "No hay servidor web"
fi

# Operadores de prueba:
# -f archivo   existe y es archivo regular
# -d dir       existe y es directorio
# -z "$var"    variable esta vacia
# -n "$var"    variable NO esta vacia
# -eq -ne -gt -lt -ge -le   comparaciones numericas
# = !=         comparaciones de strings

# BUCLES
for i in {1..5}; do
    echo "Intento $i de 5"
done

# While con lectura de archivo
while IFS= read -r linea; do
    echo "Procesando: $linea"
done < servidores.txt

# CASE (switch)
case "$1" in
    start)   systemctl start mi-app ;;
    stop)    systemctl stop mi-app ;;
    restart) systemctl restart mi-app ;;
    status)  systemctl status mi-app ;;
    *)       echo "Uso: $0 {start|stop|restart|status}" ;;
esac
#!/bin/bash
# FUNCIONES

# Funcion con retorno y parametros
log() {
    local nivel="$1"
    local mensaje="$2"
    echo "[$(date +%H:%M:%S)] [$nivel] $mensaje"
}

verificar_servicio() {
    local servicio="$1"
    if systemctl is-active --quiet "$servicio"; then
        log "OK" "$servicio esta corriendo"
        return 0
    else
        log "ERROR" "$servicio esta caido!"
        return 1
    fi
}

# Uso
log "INFO" "Iniciando verificacion"
if verificar_servicio "nginx"; then
    log "INFO" "Todo bien"
else
    log "WARN" "Reiniciando nginx..."
    sudo systemctl restart nginx
fi

# Capturar exit code
grep -q "error" /var/log/app.log
if [ $? -eq 0 ]; then
    echo "Se encontraron errores"
fi

# read: leer input del usuario
read -p "Continuar? (s/n): " respuesta
if [ "$respuesta" = "s" ]; then
    echo "Continuando..."
fi
ConsejoSiempre usa comillas dobles en variables: "$VAR" en vez de $VAR. Sin comillas, si la variable tiene espacios o esta vacia, el script puede fallar silenciosamente.
← Redes y TroubleshootingScripts Robustos y Troubleshooting →

Practica esta lección

Resuelve los ejercicios del curso de Linux & Terminal en la app, gratis y con corrección automática.

Empezar a practicar