Las variables son un lugar donde se guardan datos. Bash tiene dos tipos de datos: strings y arrays. Hablaremos de los arrays más adelante.
Asignas una variable así:
name="value"
Importante: ¡no debe haber ningún espacio alrededor del signo igual!
Cuando hay espacios, como en este ejemplo,
x = 10
¡bash va a llamar al comando x con los dos argumentos = y 10!
A las variables también se les puede llamar parámetros. Los dos términos se usarán de forma intercambiable en este documento.
Algunos parámetros importantes que usa o establece bash son:
PATH: una lista de directorios separados por dos puntos que se usa para encontrar comandos externos.IFS: el «separador interno de campos».
Veremos cómo se usa más abajo.PWD: tu directorio de trabajo actual.
Tendrá el mismo valor que la salida del comando pwd.RANDOM: un número entero pseudoaleatorio entre 0 y 32767.BASH_VERSION: el string de versión de la instancia de bash en ejecución.Un nombre de variable se compone de letras mayúsculas, letras minúsculas, números y guion bajo. No puede empezar con un número.
Obtienes el valor de un parámetro con la sintaxis $varname.
x=10
echo "The value of x is $x"
Para evitar que el nombre de la variable se confunda con el texto que lo rodea, puedes encerrar el nombre de la variable entre llaves.
Por ejemplo, para imprimir el string 10x10
echo "${x}x$x"
# or
echo "${x}x${x}"
Algunas guías de estilo recomiendan usar llaves en la mayoría de los casos por legibilidad o consistencia.
Como vimos en la lección de Comandos y argumentos, los comandos pueden recibir argumentos. Los scripts de bash no son la excepción. Los argumentos de la instancia actual de bash se llaman parámetros posicionales. Se pueden recuperar con estos parámetros especiales:
$1: el primer parámetro posicional$2 ... $9: los parámetros siguientes${10} ...: los números de dos dígitos requieren llaves.$0: el nombre del script actual.Los argumentos de una función del shell también son parámetros posicionales, y se manejan igual que estos. Veremos más sobre las funciones en una lección posterior.
Existen algunos parámetros especiales que te ayudan a trabajar con los parámetros posicionales.
$# se expande al número de parámetros posicionales."$@" se expande a la lista de todos los parámetros posicionales, cada uno como una palabra separada."$*" se expande a un solo string con todos los parámetros posicionales unidos por un carácter.
$IFS, que por defecto es un espacio."$@" es la forma más segura de pasar parámetros posicionales a otro comando manteniéndolos bien entrecomillados.
También es lo que usarás para recorrer los parámetros posicionales con un bucle:
for arg in "$@"; do
do_something_with "$arg"
done
En la práctica, "$@" se usa más a menudo que "$*".
Una operación muy frecuente en los scripts de bash es capturar la salida de un comando y guardarla en una variable. Para hacerlo, usarás la sustitución de comandos.
var=$(command)
Por ejemplo, para convertir un string a mayúsculas, puedes hacer esto:
text="Hello world!"
uppercase=$(echo "$text" | tr '[:lower:]' '[:upper:]')
echo "$uppercase"
# => HELLO WORLD!
Bash tiene muchas herramientas integradas para manipular variables y strings, de modo que no necesites llamar a comandos externos.
Convertir texto a mayúsculas.
En la sección anterior mostré cómo usar tr para poner algo de texto en mayúsculas.
Para hacerlo en bash:
echo "${text^^}"
De forma similar, ${text,,} convierte el valor a minúsculas.
Proporcionar un valor por defecto si la variable está vacía.
default="nothing here"
result=""
echo "${result:-$default}"
# => nothing here
Buscar y reemplazar.
text="Hello world!"
echo "${text//[aeiou]/X}"
# => HXllX wXrld!"
Hay muchas otras expansiones de parámetros interesantes: extraer una subcadena, obtener la longitud del string, asignar un valor por defecto, eliminar texto del inicio o del final del valor, y más. Lee sobre ellas en el manual.