¿Que es un script?
Un script es una serie de comandos almacenados en un fichero que se ejecutan con una «shell» (intérprete de comandos), el contenido del fichero puede contener mas datos, tales como variables o condicionales usados habitualmente en programación.
Y aquí viene el problema de mucha gente, ¿necesito saber programar para administrar un sistema Linux? La respuesta es no, pero sí es altamente recomendable dado que te ayudará en muchas tareas, por lo cual recomiendo que sigáis leyendo.
Inicialmente un script nos puede servir para usar comandos para tareas periódicas o repetitivas.
Aquí nos centraremos en la shell de bash, que es de las que más se usa en linux.
Cabecera del script
Los scripts deben comenzar con la cabecera «#!», que indica la shell con la que deben ejecutarse, haciendo referencia a su ruta absoluta. Por ejemplo para bash sería:
#!/bin/bash
Variables
Lo siguiente que se debe hacer es declarar las variables que vamos a usar:
Las variables al declararlas se escriben de manera normal, por ejemplo «declare -i var».
Para usarlas en el script hay que escribir por delante el carácter del dolar «$».
echo $var
Para delimitar los caracteres se usan los caracteres de llaves, «{» y «}».
echo ${var}
Para seleccionar un valor de un array se introduce la posición del array entre corchetes, «[» y «]».
echo ${var[0]}
Opciones de «declare»:
declare -r "nombre variable" ### Declara una variable de solo lectura
declare -i "nombre variable" ### Declara una variable numerica
declare -a "nombre variable" ### Declara un array
declare -f function "nombre variable" ### Declara una funcion
declare -x export "nombre variable" ### Declara una variable que sera exportada fuera del script
declare -x var=$value"nombre variable" ### Declara una variable con el valor de otra variable
Una vez declaradas las variables ya podemos crear las funciones, estas se declaran antes que las operaciones ya que los scripts en bash se interpretan línea a línea, y si usamos una función antes de estar creada nos devolverá un error la ejecución del script.
Funciones
Las funciones se declaran de la siguiente manera:
function "nombre_funcion" {
"Cotenido de la funcion"
}
Para llamar a una función y que se ejecute su contenido solo debemos escribir en nombre de la función y el script al llegar a ese punto ejecutara todo el contenido.
Las funciones son útiles para ahorrar código que se repite o para organizar el contenido.
Tras las funciones ya podemos empezar con los condicionales, los bucles y las operaciones.
Condicionales
Los condicionales sirven para comparar variables con valores o con otras variables para realizar una operación u otra en función del resultado de la comparación.
Los condicionales mas usados son «if» junto con «else», «case» y «select».
IF
Los comandos se ejecutan cuando la condición es verdadera
if [ "condicion" ]; then
"Comandos"
fi
IF ELSE
Los comandos-if se ejecutan cuando la condición es verdadera, y comandos-else se ejecuta cuando la condición es falsa.
if [ "condicion" ]; then
"Comandos-if"
else
"Comandos-else"
fi
ELIF
Los comandos-if se ejecutan cuando la condición-if es verdadera, y comandos-elif se ejecuta cuando la condición-if es falsa y la condición-elif son verdaderas.
if [ "condicion-if" ]; then
"Comandos-if"
elif [ "condicion-elif" ]; then
"Comandos-elif"
fi
CASE
Un case es como un «if» pero con varias condiciones, lo que se evalua es si el valor de «expresion» es igual «valor1», «valor2», «valorX»…, y se ejecutan los comandos que hay dentro del valor con el que es coincidente, si ningún valor coincide se ejecutan los «comandos-default», es la salida por defecto cuando el valor de «expresion» no es igual a ninguna de las introducidas en «valorX»
case expresion in
valor1)
"Comandos-valor1"
break
;;
valor2)
"Comandos-valor2"
break
;;
......
*)
"Comandos-default";;
esac
Muestra una lista de opciones para que el usuario elija una, las opciones son los valores del array, y la variable $i contendrá el valor el valor del array que se ha elegido.
SELECT
select i in "Array": do
"Comandos"
done
Condiciones
Las condiciones son las comparaciones que se pueden utilizar por ejemplo en un «if».
Cadenas alfanuméricas
cadena1 == cadena2 ### cadena1 es igual a cadena2
cadena1 != cadena2 ### cadena1 no es igual a cadena2
cadena1 < cadena2 ### cadena1 es menor que cadena2
cadena1 > cadena2 ### cadena1 es mayor que cadena 2
-n cadena1 ### cadena1 no es igual al valor nulo (longitud mayor que 0)
-z cadena1 ### cadena1 tiene un valor nulo (longitud 0)
Valores numéricos
x -lt y ### x menor que y
x -le y ### x menor o igual que y
x -eq y ### x igual que y
x -ge y ### x mayor o igual que y
x -gt y ### x mayor que y
x -ne y ### x no igual que y
Atributos de ficheros
-d fichero ### fichero existe y es un directorio
-e fichero ### fichero existe
-f fichero ### fichero existe y es un fichero regular (no un directorio, u otro tipo de fichero especial)
-r fichero ### Tienes permiso de lectura en fichero
-s fichero ### fichero existe y no esta vacio
-w fichero ### Tienes permiso de escritura en fichero
-x fichero ### Tienes permiso de ejecucion en fichero (o de busqueda si es un directorio)
-O fichero ### Eres el dueño del fichero
-G fichero ### El grupo del fichero es igual al tuyo.
fichero1 -nt fichero2 ### fichero1 es mas reciente que fichero2
fichero1 -ot fichero2 ### fichero1 es mas antiguo que fichero2
Bucles
Un bucle es la repetición de una operación. Puede servirnos para realizar varias veces una operación, como un contador.
Los mas usados son «for», «for in», «while» y «until».
FOR
El contenido se ejecuta mientras se cumpla la condición del medio, en este caso que $i sea menor o igual que 5. La primera condición inicia la variable $i y la tercera condición es el operando de incremento o decremento.
for ((i=0; i<=5; i=i+1)); do
"Comandos"
done
FOR IN
Se ejecutará el contenido del bucle una vez por cada valor del array, el array puede ser un comando ejecutado normal que devuelva uno o mas valores, como un «ls».
for i in "Array"; do
"Comandos"
done
Se puede crear un FOR IN que simule el funcionamiento de un FOR:
for i in {${num_inicial}..${num_final}..${incremento}}; do
"Comandos"
done
WHILE
El bucle se ejecuta siempre que se cumpla la condición de que $i sea menor o igual que 5.
while [ $i -le 5 ]; do
"Comandos"
done
UNTIL
El bucle se seguirá ejecutando hasta que se cumpla la condición, en este caso hasta que la variable $i tenga un valor numérico mayor que 5.
until [ $i -gt 5 ]; do
"Comandos"
done
Operaciones
Las operaciones son los comandos que finalmente lanzaremos, estos son comandos que usaríamos normalmente el la línea de comando bash.