#!/bin/bash
Shebang (intérprete del script)
set -euo pipefail
Salir en error, variables sin definir, pipe fallido
echo "Hello World"
Imprimir línea
read -p "Name: " name
Leer entrada con prompt
read -s password
Leer entrada silenciosa (contraseñas)
# This is a comment
Comentario
name="Alice"
Asignar variable (¡sin espacios!)
echo "$name"
Leer variable
echo "${name}!" Sintaxis con llaves para claridad
readonly PI=3.14
Constante de solo lectura
unset name
Eliminar variable
export PATH="$HOME/bin:$PATH"
Exportar a subshells
${var:-default} Default si no definida
${var:=default} Default y asignar si no definida
${var:?error message} Error si no definida
${#var} Longitud del string
${var:0:3} Substring (offset 0, longitud 3)
${var/old/new} Reemplazar primera ocurrencia
${var//old/new} Reemplazar todas las ocurrencias
if [ "$x" -eq 1 ]; then echo "one" fi
If con comparación numérica
if [[ "$s" == "hi" ]]; then ... fi
If con comparación de string ([[ ]])
if [ -f file.txt ]; then ... fi
If el archivo existe
if [ -d /etc ]; then ... fi
If el directorio existe
if [ -z "$x" ]; then ... fi
If string está vacío
if [ -n "$x" ]; then ... fi
If string no está vacío
-eq -ne -lt -le -gt -ge
Operadores numéricos
[[ "$s" =~ ^[0-9]+$ ]]
Match regex
case "$x" in 1) ... ;; 2|3) ... ;; *) ... ;; esac
Sentencia case
[ -f file ] && echo exists || echo missing
If/else en línea
for i in 1 2 3; do echo $i; done
For sobre lista
for i in {1..10}; do ... done For sobre rango
for i in $(seq 1 10); do ... done
For con seq
for f in *.txt; do ... done
For sobre archivos (glob)
for ((i=0; i<10; i++)); do ... done
Bucle for estilo C
while [ "$n" -lt 10 ]; do n=$((n+1)) done
Bucle while
while read line; do echo "$line"; done < file.txt
Leer archivo línea por línea
until [ condition ]; do ... done
Bucle until (while negado)
break continue
Break/continue en bucle
arr=(a b c d)
Crear array
echo "${arr[0]}" Acceder por índice
echo "${arr[@]}" Todos los elementos
echo "${#arr[@]}" Longitud del array
arr+=(e f)
Añadir elementos
for item in "${arr[@]}"; do ... done Iterar array
declare -A map map[key]="value"
Array asociativo (dict)
greet() {
echo "Hi $1"
}
greet "Alice" Definir y llamar función
$1 $2 $3 ... $@ $#
Args: pos 1, 2, 3, todos, cantidad
local x=5
Variable local de función
return 0
Código de salida desde función
command > file.txt
Redirigir stdout (sobrescribir)
command >> file.txt
Redirigir stdout (append)
command 2> errors.log
Redirigir stderr
command &> both.log
Redirigir stdout + stderr
command < input.txt
Entrada desde archivo
cmd1 | cmd2 | cmd3
Pipe entre comandos
$(command)
Sustitución de comando
$((2 + 3))
Expansión aritmética
cmd1 && cmd2 || cmd3
Ejecutar cmd2 si cmd1 éxito, sino cmd3
cmd &
Ejecutar en segundo plano
wait
Esperar tareas en background
trap 'cleanup' EXIT
Ejecutar al salir del script
Cheat Sheet de Bash — Variables, Bucles, Condicionales y Pipes
Bash lleva siendo la shell por defecto en servidores Linux desde principios de los noventa, y la gramática del lenguaje apenas se ha movido desde entonces: variables, condicionales, bucles, tuberías y comprobaciones de archivos. La chuleta de abajo cubre más de 60 fragmentos en esas áreas, más la expansión de parámetros y las operaciones con arrays. La mayoría de los líos en scripts reales no vienen de olvidar la sintaxis. Vienen de rarezas que parecen normales pero muerden. Un espacio suelto alrededor de `=` convierte una asignación en una búsqueda de comando que falla. `set -e` deja de proteger el script en cuanto se encadenan dos comandos con una tubería. Una variable sin comillas que guarda un valor con un espacio dentro se divide en varias palabras y rompe cada test posterior. Estos son los fragmentos que se acaban consultando al depurar precisamente eso: el operador de comparación adecuado, la expansión correcta, la redirección que aplica, sin tener que releer el manual de Bash desde la línea uno cada vez.
Trampas habituales en Bash
Hay un puñado de patrones que merecen estar en la primera pantalla de cualquier script de Bash. `set -euo pipefail` al principio deja los errores a la vista: la shell sale al primer fallo, las variables sin definir cuentan como error y los fallos en las tuberías se propagan. No atrapa todo, pero atrapa bastante más que `set -e` a secas. Entrecomillar las variables importa: `"$archivo"` y no `$archivo`, siempre, porque en cuanto un nombre de fichero contenga un espacio o un carácter de glob, una expansión sin comillas hace que un único argumento se desdoble en tres. La forma `[[ ... ]]` suele preferirse frente a `[ ... ]` cuando no se necesita portabilidad POSIX: gestiona variables vacías sin romperse, admite expresiones regulares y se comporta de forma más predecible. La cálculo aritmético en Bash con `$((...))` solo entiende enteros, así que los cálculos con decimales conviene delegarlos a `bc` o `awk` en vez de pelearse con ellos en Bash. La chuleta agrupa todo esto en Basics, Variables, Condicionales, Bucles, Arrays, Funciones y E/S para que la sección adecuada esté a un clic.
- Más de 60 fragmentos de Bash
- Expansiones de variables y valores por defecto
- Condicionales y operadores de test
- Arrays (indexados y asociativos)
- Funciones y argumentos
- Pipes y redirección
Gratis. Sin registro. Tus datos permanecen en tu navegador. Anuncios mediante Google AdSense (con consentimiento).
Por Marco B. ·