Seguro que todos los que leéis MuyLinux usáis regularmente la consola, pero ¿cuántos sois capaces de escribir un buen script bash? Estos archivos permiten automatizar tareas y acceder a potentes funciones, y su puesta en marcha no es tan complicada.
Lo demuestra un artículo de Linux.com en el que se nos da una introducción con los primeros pasos a la hora de crear un script bash, algo que no es tan complicado y que poco a poco nos permitirá sacarle mucho partido a nuestra distribución Linux.
Esto es una adaptación del artículo de Linux.com permitirá a aquellos que se sienten incómodos con el inglés poder seguir estos sencillos pasos.
En primer lugar, todos los scripts bash comienzan con lo mismo
#!/bin/bash
Esos dos primeros caracteres tienen un nombre popular, shebang, y permiten determinar qué intérprete se encargará de ejecutar el resto del script. En lugar de bash podríamos usar otros intérpretes de comandos como tcsh, zsh, pero también otros como Perl o Python. A continuación podremos incluir algún comentario:
#!/bin/bash
# Un script simple
Y ahora vamos con el meollo. Supongamos que queremos ejecutar un comando rsync para realizar una copia de seguridad de una de nuestras carpetas.
#!/bin/bash
# rsync script
rsync -avh --exclude="*.bak" /home/user/Documents/ /media/diskid/user_backup/Documents/
Ahora tendremos que salvar ese fichero que acabamos de editar (con el nombre que queramos, por ejemplo, copiaseguridad) y atención, cambiar los permisos para poder ejecutarlo, con un cómodo:
chmod 700 copiaseguridad
Variables
El script anterior es interesante, pero dispone de rutas permanentes, y sería interesante poder contar con rutas variables, como por ejemplo sucede con este otro script:
#!/bin/bash
# rsync using variables
SOURCEDIR=/home/user/Documents/
DESTDIR=/media/diskid/user_backup/Documents/
rsync -avh --exclude="*.bak" $SOURCEDIR $DESTDIR
Eso permite establecer dos variables que luego podremos reutilizar a lo largo de todo el script.
Entrada de datos
Los scripts también pueden ser interactivos, y nos pueden pedir un dato (por ejemplo, un ruta) para luego tomar esa variable para el resto del script. Si queremos pedir un argumento haríamos lo siguiente:
#!/bin/bash
echo $1
Y eso aplicándolo a un script sencillo podría resultar en un pequeño script que nos pregunte el nombre:
#!/bin/bash
echo -e "Escribe tu nombre, por favor: "
read nombre
echo "Encantado de saludarte, $nombre"
Ese script esperará a que introduzcamos algo y pulsemos Enter para luego tomar nota de esa variable y usarla para el resto del script. Eso, aplicado a la idea inicial del rsync, serviría para algo como esto:
#!/bin/bash
echo -e "De que directorio quieres hacer el backup?"
read directory
DESTDIR=user@host.rsync.net:$directory/
rsync --progress -avze ssh --exclude="*.iso" $directory $DESTDIR
Este script leerá de la entrada el directorio en el que queremos hacer el backup, para luego copiarlo en la máquina del ejemplo (host.rsync.net) y el directorio especificado (directory).
Fácil, ¿verdad? Como indican en el artículo de Linux.com, podéis obtener más información sobre este tipo de scripts en la Bash Guide for Beguinners, aunque hay muchos más recursos también en español, como este blog con scripts ya avanzaditos o esta documentación en formato wiki y en nuestro idioma.