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