Los scripts son ficheros de texto ejecutables que contienen comandos de sistema para ser ejecutados en conjunto, facilitando la vida del administrador y de otros usuarios en la ejecución de tareas en el sistema.

En este artículo se explica la sintáxis que se puede utilizar en nuestros scripts.

Operadores lógicos

En variables:

-lt Número es menor que (LessThan)
-gt Número es mayor que (GreaterThan)
-le Número es menor igual (LessEqual)
-ge Número es mayor igual (GreaterEqual)
-eq Número es igual (EQual)
-ne Número es diferente (NotEqual)
= String es igual
!= String es diferente
-n String no es nulo
-z String es nulo

En ficheros:

-d Es un directorio
-f Es un fichero normal
-s El tamaño del fichero es mayor que cero
-r El fichero tiene permiso de lectura
-w El fichero tiene permiso de escritura
-nt El fichero es más reciente (NewerThan)
-ot El fichero es más antiguo (OlderThan)
-ef El fichero es el mismo (EqualFile)

Estructura IF

Sintáxis:

if <condicion1>; then
comandos1
elif <condicion2>; then
comandos2
else
comandos3
fi

Ejemplo:

read VAR
if [ $VAR -ge 10 ] && [ $VAR -le 20 ]; then
echo "Has introducido un número entre 10 y 20!"
else
echo "$VAR"
fi

 

Estructura CASE

Sintáxis:

case <variable> in
<algo_para_comparar>1) <comando>1 ; <comando>2 ;;
<algo_para_comparar>2) <comando>3 ; <comando>4 ;;
<algo_para_comparar>n) <comando>n ; <comando>n+1 ;;
*) echo "Introducir un parámetro válido" ;;
esac

Ejemplo:

case $1 in
"list") echo "Listar!";;
"ni!") echo "Ni!";;
*) echo "Parámetro $1 desconocido";;
esac

 

Estructura FOR

Sintáxis:

for((<variable>=<valor_inicial>; <condicion>; <variable>++/--));
do
<comandos>
done

Ejemplo:

for((i=1; i <= 100; i++));
do
echo "$i"
done
for MAQUINA in `cat /root/listado_maquinas`
do
echo $MAQUINA
done

 

Estructura WHILE

Sintáxis:

while <condición>; do
<comando>1
<comando>2
<comando>n
done

Ejemplo:

i=1
while [ i -le 100 ]; do
echo "$i"
done


Depuración

Para depurar secuencialmente nuestro script ejecutar el siguiente comando:

# bash -x script.sh


Parámetros

Algunas variables establecidas internamente por el shell y que están disponibles para el usuario:

  • $1 - $9 parámetros posicionales
  • $0 nombre del comando actual
  • $# número de parámetros posicionales
  • $? exit status del último comando ejecutado dado como un string decimal. Si todo ha ido bien se retorna cero.
  • $$ el numero de proceso de este shell, útil para incluirlo en nombres de ficheros para hacerlos únicos.
  • $! la pid del último comando ejecutado en background.
  • $- las opciones actuales suministradas para esta invocación del shell.
  • $* un string que contiene todos los argumentos del shell comenzando por el $1.
  • $@@ igual que el anterior, excepto cuando va entrecomillado.