La variable $? contiene el resultado de la ejecución del último comando. (0 si ha sido correcto o 1 si ha habido error).

Con una contrabarra escapamos de algo en la ejecución de un comando. Por ejemplo:

echo «\$0» escribiria por pantalla $0 en vez del contenido de la variable (Nombre del script en este caso).

$$ Contiene el PID de la BASH
$0 Contiene el nombre del script
$1…$9 Parametros del script
$# Numero de parametros que pasamos al script
$* Contiene todos los parametros separados por espacios
$@ Contiene un array con todos los argumentos pero por posicion

Para almacenar el valor de una variable usamos el comando read:

read variable

Podemos leer varias variables separadas por espacios:

read variable1 variable2

Para guardar el resultado de la ejecución de un comando en una variable podemos meter el comando entre comillas invertidas o bien dentro de $(…). Por ejemplo:

prueba=`ls -l | wc -l` o prueba=$(ls -l | wc -l)

El asterisco sirve de comodí­n y el signo ? se usa para un caracter solamente:

ls pr?eba
ls ? (Archivos de una sola letra)
ls ?? (Archivos de dos letras)

Podemos hacer listas de caracteres:

ls [a,b]* (Ficheros que empiecen por a ó b)
ls [!z] (Ficheros que no empiecen por z).

Con el simbolo ‘<‘ podemos usar un archivo como entrada de un comando:

sort < lista_sin_ordenar

Descriptores de ficheros: 0 – Entrada estandar, 1 – Salida estandar y 2 – Error estandar.

$ cat fichero_inexistente 2&>errores

Si usamos la opcion -e con el echo le indicamos que interprete los caracteres de control que encuentre:

echo -e «hola \n adios»

Codigo de escape y resultado:

\e Envia un caracter de escape (esc)
\a Envia un caracter de timbre (bell)
\b Envia un caracter de retroceso (backspace)
\f Envia un caracter de avance de forma
\n Envia un caracter de retorno de carro (
\r Envia un caracter de avance de linea (
\t Envia un caracter de tabulacion (Tab)
\v Envia un caracter de tabulacion vertical
\’ Envia un caracter de coma simple
\\ Envia el caracer de diagonal inversa (\)
\c Mantiene el cursor en la misma linea

La evaluación de expresiones se realiza o bien encerrando la expresión entre corchetes o bien con la expresión test:

[ $var -eq 1 ]
test $var -eq 1

Las opciones permitidas para expresiones numéricas son:

-lt Menor que
-eq Igual que (Para cadenas usamos el signo ‘=’)
-gt Mayor que
-le Menor o igual que
-ge Mayor o igual que
-ne No coinciden

-a
Operador lógico and
exp1 -a exp2 . (&&)
-o
Operador lógico or
exp1 -o exp2 . (||)

-d archivo archivo es un directorio
-e archivo archivo existe
-f archivo archivo es un archivo ordinario
-r archivo archivo es leible por el proceso
-s archivo archivo tiene longitud mayor a
-w archivo archivo es escribible por el proceso
-x archivo archivo es ejecutable
-L archivo archivo es una liga simbolica
-n valor valor no es nulo
-z valor valor es nulos

Para negar expresiones usamos el !:

[ ! -r «/etc/shadow» ]

Las expresiones aritmeticas se realizan con:

$((expresion))
$((i=(i+10) * j))
resultado=$(( i >0 && i <=100 )) (Resultado valdra 0 o 1)

Los arrays en bash tienen la siguiente sintaxis:

nombre[indice]=valor

$ FRUTA[0]=manzana
$ FRUTA[1]=pera
$ FRUTA[2]=naranja
$ echo ${FRUTA[0]}

$ FRUTA[primera]=manzana
$ FRUTA[segunda]=pera
$ FRUTA[tercera]=naranja

$ FRUTA=(manzana pera naranja)
Es equivalente a:
$ FRUTA[0]=manzana
$ FRUTA[1]=pera
$ FRUTA[2]=naranja

$ echo ${computadoras[@]} Accede a todos los elementos
$ echo ${computadoras[*]} Accede a todos los elementos

Para enviar el proceso a background, utilizamos el comando bg:

$ sleep 500
^Z
[6]+ Stopped sleep 500
$ bg
[6]+ sleep 500 &

Para crear un archivo podemos usar:

$ cat > archivoprueba
texto…

Podemos buscar una cadena dentro de un archivo con:

$grep cadena fichero

Sentencias de control:

if expresion ; then
sentencias
elif
sentencias
else
sentencias
fi

case variable in
valor1) Sentencias
valor2) Sentencias
*)    Sentencias
esac

for i in v1 v2 v3 v4; do
echo «Estas son las variables $i»
done

while [ expresion ]; do
sentencias
break
done

until [ expresion ]; do
sentencias
done

Funciones:

function memf {
exec free | grep Mem | awk ‘{print $4}’ }