Documenti di Didattica
Documenti di Professioni
Documenti di Cultura
ISO-ASIR
Una de las cosas con la que trabajan mucho los administradores linux es la programación de shell
scripts, dado que éstos nos dan la posibilidad de preparar tareas que simplifican nuestro trabajo
diario.
Para escribir un shell script necesitamos un editor de texto plano, como por ejemplo: nano o gedit.
En realidad nos vale cualquier editor de texto, siempre y cuando el archivo lo guardemos como
text/plain.
Para seguir la explicación utilizaremos una máquina virtual con linux y crearemos un
directorio de nombre ~ejemplos_sh donde iremos realizando los ejemplos prácticos
sugeridos.
#!/bin/bash
echo Este es mi primer script en bash!
$ chmod +x script.sh
$ ./script.sh
Práctica: 'ej01.sh':
#!/bin/bash
# Este es mi primer shell script con bash
clear # Borramos la pantalla
echo Hola, me llamo Juan y estudio ASIR en el IES Castelar
echo Adios!
echo
2. Variables
Una variable es un contenedor que almacena un valor. Utilizamos variables para guardar
valores que necesitaremos en nuestro script. Un detalle que debemos indicar es que las
variables en shell script no tienen tipos asociados (entero, cadena etc).
Veamos a continuación cómo se asigna un valor a una variable:
Ejemplo:
# Asignamos el valor 1 a i
i=1
# Asignamos Hola! a la variable cadena
cadena="Hola!"
Una cuestión importante: No podemos dejar espacios entre la variable y el igual o el igual
y el valor, porque el shell lo interpretará como un comando y nos dará error.
Veamos ahora como podemos obtener el valor de una variable.
Para acceder al contenido de una variable empleamos $ delante de su identificador:
Ejemplo:
$ i=4
# Mostramos el valor de la variable i por pantalla
echo $i
echo "El valor asignado a i es $i"
Práctica: 'ej02.sh':
#!/bin/bash
clear
# Asignamos variables
nombre=Juan
ciclo=ASIR
centro="IES Castelar"
echo Hola, me llamo $nombre
echo y estudio $ciclo en el $centro.
echo Adios!
3. Uso de parámetros en scripts
Podemos usar parámetros en nuestros scripts. Dichos parámetros nos permitirán pasar
valores externos que utilizaremos dentro:
Práctica: 'ej03.sh':
#!/bin/bash
# Uso de parametros de entrada
# Llamada: ./ej03.sh param1 param2 param3
echo
echo "Nombre del script \$0 : " $0
echo "Numero de parametros \$# : " $#
echo "El parametro 1 \$1 : " $1
echo "El parametro 2 \$2 : " $2
echo "El parametro 3 \$3 : " $3
Para obtener el resultado (éxito o error) de una ejecución de un comando , podemos utilizar
$?. Esta variable toma valor 0 de salida si la ejecución del comando anterior se ejecutó con
éxito y en caso de fallo tomaría un valor distinto de 0.
Ejemplo:
Práctica: 'ej04.sh':
#!/bin/bash
# Uso de Operadores aritméticos
# Llamada: ./ej04.sh operador1 operador2
echo
echo "$1 + $2 = : " $[$1+$2]
echo "$1 * $2 = : " $[$1*$2]
echo "$1 - $2 = : " $[$1-$2]
echo "$1 / $2 = : " $[$1/$2]
Práctica: 'ej05.sh':
#!/bin/bash
# Lee los 2 operandos desde terminal con la orden read
# Llamada: ./ej05.sh (nos pedira los 2 numeros)
clear
# el modificador -n hace que no haya retorno de carro en el echo
echo -n "Entra el primer operando : "
read a
# Otra forma: incluir pregunta en el read con el modificador -p
read -p "Entra el segundo operando : " b
echo "$a + $b = : " $[$a+$b]
echo "$a * $b = : " $[$a*$b]
echo "$a - $b = : " $[$a-$b]
6. Operadores de comparación
Práctica: 'ej06.sh':
#!/bin/bash
# Sentencia de comparación IF simple
# Llamada: ./ej06.sh (nos pedira un numero)
clear
read -p "Adivina el numero que pienso : " num
if [ $num -eq 5 ]
then
echo "Has acertado, el número era el $num"
fi
Práctica: 'ej07.sh':
#!/bin/bash
# Sentencia de comparación IF con ELSE
# Llamada: ./ej07.sh (nos pedirá un numero)
clear
read -p "Adivina el número que pienso : " num
if [ $num -eq 5 ]
then
echo "Has acertado, el número era el $num"
else
echo "Lo siento. No has acertado"
echo "Otra vez será"
fi
7.2. Sentencia case
Se utiliza cuando el valor de una variable ha de ser contrastado con varios valores. Su
sintaxis es la siguiente:
case variable in
patron1) comando1
comando2;;
patron2) comando3
comando4;;
....
....
esac
Comprueba si variable coincide con algunos de los patrones (patron1, patron2,...) y ejecuta
los comandos asociados con la primera coincidencia que tiene lugar.
Sólo se ejecuta un único grupo de comandos.
El ";;" es el delimitador de los comandos que se ejecutarán para un determinado patrón y
"esac" es el fin de la sentencia case.
Práctica: 'ej08.sh':
#!/bin/bash
# Sentencia CASE: Ejemplo Menú de Opciones
# Llamada: ./ej08.sh
clear
echo "-------- M E N U -----------"
echo "[1] Listar archivos"
echo "[2] Ver directorio de trabajo"
echo "[3] Crear directorio"
echo "----------------------------"
echo
read -p "Ingrese una opción: " OPCION
case $OPCION in
1) ls;;
2) pwd;;
3) read -p "Ingrese nombre del directorio a crear: " DIRECTORIO
mkdir $DIRECTORIO;;
esac
8. Bucles
El shell nos aporta mecanismos para realizar tareas repetitivas mediante el empleo de
estructuras que permiten repetir un bloque de comandos.
Esta estructura permite repetir un bloque de comandos asignando valores de una serie a
una variable en cada iteración.
for VARIABLE in SERIE; do
bloque de comandos
done
Es otra estructura de bucle que permite ejecutar un bloque de comandos mientras se evalúe
una condición a cierto:
while CONDICION; do
bloque de comandos
done
Cada iteración se evalua la condición y en el momento que no sea cierta, el bucle termina.
Ejemplos de bucles:
# equivalente a seq 1 5
i=1
while [ $i -le 10 ]; do
echo $i
i=$(($i+1))
done
# leemos de stdin hasta que se introduzca la palabra 'salir'
read linea
while [ $linea != "salir" ]; do
read linea
done