best counter
GNU/Linux. MuyLinux

Cómo escribir un pequeño script bash

9/02/2010| por | 19 comentarios

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.

tuxascii Cómo escribir un pequeño script bash

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.

Related posts:

  1. Cómo darle sabor a tus shell scripts
  2. Libro gratis: Bash shell Scripting Guide for Beginners
  3. Ponle a bash memoria de elefante
  4. Newrez, script útil para aumentar la resolución en netbooks
  5. Introducción a bash

Hay 19 comentarios

  1. 1

    muy interesante….he aprendido un par de cosas nuevas hoy y eso que apenas comienzo el dia :)

    • 17
      Jiseon dice:

      gracais por el excelente mtaeial de edificacion personal y para nuestras iglesias , gracias por la pagina se9 que el sef1or la esta dirigiendo he intentado descarga el divd del segundo trimestre pero el url no es valido por favor me gustaria tenerlo para ensef1arlo a mi congregacif3n.

  2. 2
    glezizdo dice:

    me gustaria que me ayudaseis sobre una duda en este script de copiaseguridad
    mi pregunta es ¿como haria para hacer una copia de una carpeta compartida en samba?, tal que estaria en \\192.168.1.93\copia ………. tendria que montar la unidad en mi ubuntu, o podria ejecutar la copia directamente en samba.

    gracias

    • 6
      Luis dice:

      me parece que para copiar algo por red, tendrias que usar una ruta tipo

      smb://nombrePCremoto/carpetacompartida/

  3. 3
    Dafero dice:

    Muy interesante, muchísimas gracias por la entrada.

  4. 4
    RudaMacho dice:

    Un blog muy interesante sobre scripts de bash y linea de comandos:
    http://los-pajaros-de-hogano.blogspot.com/
    Busquen “Conversaciones con HAL”, esta muy bien escrito y con un enfoque diferente a los manuales tecnicos. shaludos y felicitaciones por el post

  5. 5
    miguelinux dice:

    Me gusta más crearlas con mi gambas2..x :DDDDDDD

  6. 7
    juancarlospaco dice:

    #!/bin/python

  7. 8
    antonio dice:

    muy chulo el post, y bastante claro!

  8. 9
    Juan_ARGentino dice:

    yo si creo scripts para mi smartphone,me da mucha satisfaccion cuando funciona,despues lo comparto en los foros :)

  9. 10
    Christopher dice:

    Yo ya sé hacer scripts sencillos, lo que me gustaría hacer es convinarlo con zenity, alguno sabe como?

    • 12
      naldoco dice:

      Puedes probar leyendo el manual…

      http://library.gnome.org/users/zenity/stable/index.html.es

      Está lleno de ejemplos, y abarca todas las posibilidades de uso.

  10. 11
    Angelverde dice:

    Aprender Bash Scripting me parecio ser muy sencillo, hace poco hice uno para mandar a twitter o identi.ca frases de fortune.
    Fortune2Twitter

  11. 13
    ArmandiuxGS dice:

    No sabia lo del ‘read’, muy interesante el tema, y creo que es la primera ves que ponen algo así por aquí, ¿no?.

    Gracias Picajoso!!

  12. 14

    [...] | Muy Linux Etiquetado con: basico, crear, script Deja un comentario Comentarios (0) Trackbacks (0) [...]

  13. 15
    jado92mx dice:

    Incrfeíble que es BAsh! me has picado!

    En verdad la programación es algo que siempre he querido aprender, y ahora que veo estos ejemplos tan sencillos en Bash (para mí, más sencillos que otros lenguajes/intérpretes que haya visto), me dan ganas de hacer mini programas con ayuda gráfica de Zenity (y Shellementary :D)

    Me recuerda que un pequeñe gran programa, Prey fué escrito entero con Bash y Cron ;)

    Saludos!

    JaD!

    PD: Para los que no sabían, Prey es una herramienta multiplataforma de código abierto para rastreo de laptops – http://jado92mx.wordpress.com/2009/08/16/prey-no-necesitas-rezar-para-recuperar-tu-laptop/

  14. 16
    Noob dice:

    Queee??? Eso es un script sencillo??

  15. 18
    Clara dice:

    muy bueno, me ha ayudado bastante.. es que tengo una tarea y me pide realizar copias de respaldo de un directorio, de los ultimos tres meses, no se en realidad como hacerlo, el comando date -d ” 3 month ago” me devuelve desde que fecha deberia realizar la copia, pero no se como recorrer los archivos y comparar las fechas, si alguien me tira una ayudita, graciaass
    Saludos..

    • 19
      DNU dice:

      Aparte de que esta entrada es muy antigua te recomiendo que para tales cuestiones te registres en la lista de correo de tu distribución o en un foro dedicado a tu distribución y ahí plantees las dudas. Obtendrás respuesta probablemente en minutos.

      Suerte.

Escribe tu comentario