Saltar al contenido principal

Capítulo 6.2 - Variables y Parámetros

Objetivos de Aprendizaje​

Al final de este capítulo, usted será capaz de:

  • Utilizar variables avanzadas
  • Trabajar con parámetros de script
  • Comprender las variables especiales
  • Utilizar arreglos
  • Gestionar variables de entorno

Variables Avanzadas​

Sustitución de Variables​

#!/bin/bash
VAR="hello"

# Valor por defecto
echo ${VAR:-"default"} # hello (si VAR existe)
echo ${UNDEF:-"default"} # default (si UNDEF no existe)

# Asignar si no está definida
echo ${VAR:="default"} # hello (VAR ya existe)
echo ${UNDEF:="default"} # default (y asigna UNDEF)

# Error si no está definida
echo ${VAR:?"VAR no está definida"} # OK
echo ${UNDEF:?"UNDEF no está definida"} # Error

# Eliminar prefijo/sufijo
FILE="fichier.txt"
echo ${FILE%.txt} # fichier (elimina .txt)
echo ${FILE#fichier} # .txt (elimina fichier)

Longitud de Cadena​

#!/bin/bash
TEXT="Linux"
echo ${#TEXT} # 5 (longitud)

Extracción de Subcadena​

#!/bin/bash
TEXT="Hello Linux World"
echo ${TEXT:6} # Linux World (desde posición 6)
echo ${TEXT:6:5} # Linux (posición 6, longitud 5)

Parámetros de Script​

Argumentos Posicionales​

#!/bin/bash
# $0: Nombre del script
# $1, $2, $3...: Argumentos
# $#: Número de argumentos
# $@: Todos los argumentos (separados)
# $*: Todos los argumentos (una cadena)

echo "Script: $0"
echo "Primero: $1"
echo "Segundo: $2"
echo "Cantidad: $#"
echo "Todos (@): $@"
echo "Todos (*): $*"

Ejemplo:

./script.sh arg1 arg2 arg3
# $0 = ./script.sh
# $1 = arg1
# $2 = arg2
# $3 = arg3
# $# = 3

Desplazamiento de Argumentos​

#!/bin/bash
# shift: Desplaza los argumentos
echo "1: $1"
shift
echo "2: $1" # Antiguo $2
shift
echo "3: $1" # Antiguo $3

Recorrer los Argumentos​

#!/bin/bash
# Método 1: $@
for arg in "$@"; do
echo "Argumento: $arg"
done

# Método 2: $*
for arg in $*; do
echo "Argumento: $arg"
done

# Método 3: while con shift
while [ $# -gt 0 ]; do
echo "Argumento: $1"
shift
done

Arreglos​

Declaración​

#!/bin/bash
# Declaración
FRUITS=("pomme" "banane" "orange")

# O
FRUITS[0]="pomme"
FRUITS[1]="banane"
FRUITS[2]="orange"

Acceso​

#!/bin/bash
FRUITS=("pomme" "banane" "orange")

# Elemento específico
echo ${FRUITS[0]} # pomme
echo ${FRUITS[1]} # banane

# Todos los elementos
echo ${FRUITS[@]} # pomme banane orange
echo ${FRUITS[*]} # pomme banane orange

# Longitud
echo ${#FRUITS[@]} # 3

# Índices
echo ${!FRUITS[@]} # 0 1 2

Recorrer un Arreglo​

#!/bin/bash
FRUITS=("pomme" "banane" "orange")

# Por valor
for fruit in "${FRUITS[@]}"; do
echo "Fruta: $fruit"
done

# Por índice
for i in "${!FRUITS[@]}"; do
echo "$i: ${FRUITS[$i]}"
done

Variables de Entorno​

Definir​

#!/bin/bash
# Variable local (solo script)
LOCAL_VAR="local"

# Variable de entorno (exportada)
export ENV_VAR="environment"

# O
ENV_VAR="environment"
export ENV_VAR

Variables de Sistema Comunes​

#!/bin/bash
echo "HOME: $HOME"
echo "USER: $USER"
echo "PATH: $PATH"
echo "SHELL: $SHELL"
echo "PWD: $PWD"
echo "UID: $UID"
echo "EUID: $EUID"

Modificar PATH​

#!/bin/bash
# Agregar al PATH
export PATH="$PATH:/chemin/vers/bin"

# Temporal (solo script)
PATH="$PATH:/chemin/vers/bin"

Variables Especiales​

Código de Retorno​

#!/bin/bash
# $?: Código de retorno del último comando
ls /tmp
echo "Código: $?" # 0 si éxito

# Probar
if [ $? -eq 0 ]; then
echo "Éxito"
else
echo "Fallo"
fi

PID y Procesos​

#!/bin/bash
echo "PID actual: $$"
echo "PID padre: $PPID"
echo "Último PID en segundo plano: $!"

Opciones del Shell​

#!/bin/bash
# $-: Opciones activas
echo "Opciones: $-"

Ejemplo Completo​

#!/bin/bash
# Script con parámetros y arreglos

# Función de ayuda
mostrar_ayuda() {
echo "Uso: $0 [OPCIONES] ARCHIVOS..."
echo "Opciones:"
echo " -h Ayuda"
echo " -v Modo verboso"
echo " -o Archivo de salida"
}

# Variables
VERBOSO=false
OUTPUT=""
ARCHIVOS=()

# Parsear argumentos
while [ $# -gt 0 ]; do
case $1 in
-h)
mostrar_ayuda
exit 0
;;
-v)
VERBOSO=true
;;
-o)
shift
OUTPUT="$1"
;;
*)
ARCHIVOS+=("$1")
;;
esac
shift
done

# Procesamiento
if [ ${#ARCHIVOS[@]} -eq 0 ]; then
echo "Error: Ningún archivo especificado"
exit 1
fi

[ "$VERBOSO" = true ] && echo "Procesando ${#ARCHIVOS[@]} archivo(s)"

for archivo in "${ARCHIVOS[@]}"; do
[ "$VERBOSO" = true ] && echo "Procesando: $archivo"
# Procesamiento...
done

Resumen​

En este capítulo, usted ha aprendido:

Sustitución: \${VAR:-default}, \${VAR%pattern}, etc.
Parámetros: $0, $1-$n, $#, $@, $*
Arreglos: Declaración, acceso, recorrido
Entorno: export, variables de sistema
Especiales: $?, $$, $PPID, $-
Parsing: while + case para argumentos


Próximos Pasos​

Capítulo 6.3: Estructuras de Control
Capítulo 6.4: Funciones y Cron


Capítulo creado el: Diciembre 2024