para crear un fichero de bash creas un fichero de texto plano, da igual el nombre, pero por costumbre se pone nombredelscript.sh y se le dan derechos de ejecución a este fichero, por ejemplo
chmod sirve para cambiar los derechos de los ficheros, tienes para la primera parte u g o a, u para el usuario, g para el grupo, o para otros y a para all, después del símbolo + rwx, r para leer, w para escribir y x para ejecutar.
chmod a+x script.sh
luego debes editar este fichero.
es importante iniciar el fichero de texto con la siguiente línea:
con esto le indicamos que use el interprete de comandos bash, que es el propio de linux.
#!/bin/bash
a continuación ponemos ahí nuestro código, el interprete nos va a permitir usar un gran numero de condiciones, while, switch, switch case, if, for, etc. cada una de las condiciones tiene también su sintaxis
condicional con un if
#!/bin/bashcondicional con un if y un else
if [ "foo" = "foo" ]; then
echo expression evaluated as true
fi
#!/bin/bash
if [ "foo" = "foo" ]; then
echo expression evaluated as true
else
echo expression evaluated as false
fi
condicional usando un if, un else y variables
#!/bin/bashcondicional usando un case (este es uno de mis favoritos!)
T1="foo"
T2="bar"
if [ "$T1" = "$T2" ]; then
echo expression evaluated as true
else
echo expression evaluated as false
fi
#!/bin/bashloop usando for
T1=1
case ($T1) in
1)
echo 1
;;
2)
echo 2
;;
*)
echo otro
;;
esac
#!/bin/bashloop usando while
for i in $( ls ); do
echo item: $i
done
#!/bin/bashloop usando until
COUNTER=0
while [ $COUNTER -lt 10 ]; do
echo The counter is $COUNTER
let COUNTER=COUNTER+1
done
#!/bin/bashademás de los condicionales bash nos permite ejecutar los mismos comandos que podríamos ejecutar en una consola, por ejemplo si queremos crear un script que cuando lo ejecutamos nos muestre el contenido del directorio:
COUNTER=20
until [ $COUNTER -lt 10 ]; do
echo COUNTER $COUNTER
let COUNTER-=1
done
#!/bin/bashtambién podemos concatenar comandos usando &&
ls
#!/bin/bashcabe recordar que si falla uno de los comandos el siguiente no se ejecuta, el script anterior sería similar a hacer esto:
cd /home && ls
#!/bin/bashtambién podemos hacer que el siguiente comando lea el output del anterior comando usando ||, similar a esto tenemos los pipes, que nos permiten ejecutar un programa sobre un comando, algunos de los mas usados son:
cd /home
ls
grep
ls -l |grep .avinos muestra todos las lineas del ls que contienen el string .avi
ls -l |morenos muestra el output página a página
ls -l |tailnos muestra las últimas 20 líneas del ls
ls -l |tail -80nos muestra las últimas 80 líneas del ls
por otra parte, un programa que debemos tener muy en cuenta a la hora de crear scripts para administrar sistemas es rsync, que nos va a permitir sincronizar directorios en un momento, os recomiendo ver las distintas opciones que permite el programa, en el ejemplo vamos a realizar un mirror, vamos a usar una fuente remota con ficheros actualizados y la destinación local con los antiguos y vamos a realizar lo que se llama un mirror, una copia exacta de los ficheros
el --delete hace que se borren los ficheros que ya no existen en los ficheros locales, recomiendo checkear antes de poner en producción el comando la dirección de la transferencia de datos.
rsync -avu --delete ficherosremotos ficheroslocales
finalmente una vez creado nuestro script, lo vamos a ejecutar de la siguiente forma
laura@sofre:~$ ./script.shcuando creamos un script en términos de administración lo mas probable es que queramos ejecutarlo periódicamente, así que vamos a usar el cron para que se ejecute el script cuando lo deseamos.
laura@sofre:/etc$ ls |grep cronnos fijamos que hay varios ficheros cron.algo, estos son scripts que ejecutan las tareas que hay en ellos, por otra parte está el crontab, que es el papá tareas, si lo editamos
anacrontab
cron.d
cron.daily
cron.hourly
cron.monthly
crontab
cron.weekly
cvs-cron.conf
SHELL=/bin/shsi nos fijamos vemos que ya hay unas líneas que apuntan a los ficheros que comentábamos
PATH=/usr/local/sbin:/usr/local/bin:/sbin:/bin:/usr/sbin:/usr/bin
# m h dom mon dow user command
17 * * * * root cd / && run-parts --report /etc/cron.hourly
25 6 * * * root test -x /usr/sbin/anacron || ( cd / && run-parts --report /etc/cron.daily )
47 6 * * 7 root test -x /usr/sbin/anacron || ( cd / && run-parts --report /etc/cron.weekly )
52 6 1 * * root test -x /usr/sbin/anacron || ( cd / && run-parts --report /etc/cron.monthly )
#
la sintaxys de cron es muy simple
minuto hora diames numeromes diasemana usuario comando
1. Minutos: (0-59)
2. Horas: (0-23)
3. Días: (1-31)
4. Mes: (1-12)
5. Día de la semana: (0-6), siendo 1=Lunes, 2=Martes,... 6=sábado y 0=Domingo
Para especificar todos los valores posibles de una variable se utiliza un asterisco (*).
Por ejemplo vamos a ejecutar nuestro script cada media hora
*/2 * * * * root /root/script.shdónde ponemos el script también podemos ejecutar directamente un comando
ejecutamos el script cada día laborable a las 8 de la mañana
0 8 * * 1-5 root /root/script.shPues hasta aquí cuatro cosas útiles para administrar scripts en un sistema :)
0 comentaris:
Publica un comentari a l'entrada