105.2 - Comandos clave: Scripts simples

Shebang y ejecucion

ElementoDescripcion
#!/bin/bashShebang para bash
#!/bin/shShebang para sh (POSIX)
#!/usr/bin/env bashShebang portable
chmod +x script.shDar permiso de ejecucion
./script.shEjecutar (requiere shebang y +x)
bash script.shEjecutar con bash (no requiere +x)

Variables especiales

VariableDescripcion
$0Nombre del script
$1 - $9Parametros posicionales
${10}Parametro 10+ (requiere llaves)
$#Numero de parametros
$@Todos los parametros (separados individualmente)
$*Todos los parametros (como una sola cadena)
$?Codigo de salida del ultimo comando
$$PID del shell actual
$!PID del ultimo proceso en background

read - Lectura de entrada

ComandoDescripcion
read varLeer en variable
read -p "texto: " varLeer con prompt
read -s varLeer sin eco (passwords)
read -t 5 varLeer con timeout de 5 segundos
read -n 1 varLeer solo 1 caracter
read a b cLeer multiples variables

Comparaciones numericas (test / [ ])

OperadorSignificadoEjemplo
-eqIgual[ $a -eq $b ]
-neNo igual[ $a -ne $b ]
-gtMayor que[ $a -gt $b ]
-ltMenor que[ $a -lt $b ]
-geMayor o igual[ $a -ge $b ]
-leMenor o igual[ $a -le $b ]

Comparaciones de cadenas

OperadorSignificadoEjemplo
=Igual[ "$a" = "$b" ]
!=Diferente[ "$a" != "$b" ]
-zCadena vacia[ -z "$a" ]
-nCadena no vacia[ -n "$a" ]

Operadores de archivos

OperadorSignificadoEjemplo
-eExiste[ -e /ruta ]
-fEs archivo regular[ -f /ruta ]
-dEs directorio[ -d /ruta ]
-rTiene lectura[ -r /ruta ]
-wTiene escritura[ -w /ruta ]
-xTiene ejecucion[ -x /ruta ]
-sTamano > 0[ -s /ruta ]
-LEs enlace simbolico[ -L /ruta ]

Operadores logicos

ContextoANDORNOT
[ ] / test-a-o!
[[ ]]&&||!
Entre comandos&&||!

Estructuras de control

if / elif / else

if [ condicion ]; then
    comandos
elif [ condicion ]; then
    comandos
else
    comandos
fi

case

case "$var" in
    patron1) comandos ;;
    patron2|patron3) comandos ;;
    *) comandos_default ;;
esac

for

for var in lista; do
    comandos
done

while

while [ condicion ]; do
    comandos
done

until

until [ condicion ]; do
    comandos
done

seq - Secuencias numericas

ComandoResultado
seq 51 2 3 4 5
seq 3 73 4 5 6 7
seq 0 2 100 2 4 6 8 10
seq -w 1 1001 02 … 10 (ancho fijo)
seq -s "," 1 51,2,3,4,5

Aritmetica

FormaEjemplo
$(( ))resultado=$((5 + 3))
(( ))((i++))
letlet "i = i + 1"
exprexpr 5 + 3 (con espacios)

Codigos de salida y exec

ComandoDescripcion
exit 0Terminar con exito
exit 1Terminar con error
$?Ver codigo del ultimo comando
exec comandoReemplaza el shell actual con el comando
exec > archivoRedirige toda la salida al archivo

Here Documents

SintaxisDescripcion
<< EOF ... EOFHeredoc con expansion de variables
<< 'EOF' ... EOFHeredoc sin expansion (literal)
<<- EOF ... EOFHeredoc eliminando tabulaciones iniciales

[ ] vs

Caracteristica[ ][[ ]]
POSIXSiNo (solo bash)
Logica AND/OR-a / -o&& / ||
GlobbingNo[[ $a == *.txt ]]
RegexNo[[ $a =~ patron ]]
Requiere comillasSi (recomendado)No (mas seguro)