Las variables son un lugar donde guardar 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 las puede llamar parámetros. Ambos términos se usarán indistintamente 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 localizar comandos externos.IFS: el «separador de campos interno».
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 con la versión de la instancia de bash en ejecución.El nombre de una variable se compone de letras mayúsculas, letras minúsculas, números y guion bajo. No puede empezar por 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 comentamos en la lección Comandos y argumentos, los comandos pueden recibir argumentos. Los scripts de bash no son una excepción. Los argumentos de la instancia actual de bash se llaman parámetros posicionales. Se pueden obtener con estos parámetros especiales:
$1: el primer parámetro posicional$2 ... $9: los parámetros siguientes${10} ...: los números de dos cifras 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.
Hay 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 único 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 entrecomillados de forma segura.
También es lo que usarás para recorrer con un bucle los parámetros posicionales:
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 que harás en los scripts de bash es capturar la salida de un comando y guardarla en una variable. Para ello, 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 utilidades 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 pasar texto a 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 principio o el final del valor, y más. Puedes leer sobre ellas en el manual.