===== Ejemplos en Bash: ===== Clásico script `hola mundo': #!/bin/bash echo Hola Mundo Sencillo Script para copia de seguridad #!/bin/bash tar -cZf /var/my-backup.tgz /home/yo/ stdout (redirigir) a un fichero Esto hará que la salida de un programa se escriba en un fichero. ls -l > ls-l.txt stderr a un fichero Esto hará que la salida stderr de un programa se escriba en un fichero. grep da * 2> errores-de-grep.txt stdout a stderr Esto hará que la salida stdout de un programa se escriba en el mismo descriptor de fichero que stderr. grep da * 1>&2 stderr a stdout Esto hará que la salida stderr de un programa se escriba en el mismo descriptor de fichero que stdout. grep * 2>&1 stderr y stdout a un fichero Esto colocará toda la salida de un programa en un fichero. A veces, esto es conveniente en las entradas del cron, si quiere que un comando se ejecute en absoluto silencio. rm -f $(find / -name core) &> /dev/null Una tubería sencilla con sed Ésta es una manera muy sencilla de utilizar tuberías. ls -l | sed -e "s/[aeio]/u/g" Una alternativa a ls -l *.txt Probablemente ésta es una manera más difícil de hacer un ls -l *.txt, pero se muestra para ilustrar el funcionamiento de las tuberías, no para resolver ese dilema. ls -l | grep "\.txt$" ¡Hola Mundo! utilizando variables La segunda línea crea una variable llamada STR y le asigna la cadena "¡Hola Mundo!". Luego se recupera el VALOR de esta variable poniéndole un '$' al principio. #!/bin/bash MUNDO="¡Hola Mundo!" echo $MUNDO Script de copia de seguridad utilizando Variables Este script introduce algo nuevo, fíjese en la expresión "$(date +%Y%m%d)" - Ej: $(Fecha +%Año %Mes %dia) y la salida seria asi: 20110301 #!/bin/bash backup=/home/backup-$(date +%Y%m%d).tgz tar -cZf $backup /home/backup/ Variables locales Las variables locales pueden crearse utilizando la palabra clave local. Con este ejemplo debería bastar para mostrarle el uso de una variable local. Esta sería la salida Hola Mundo #!/bin/bash HOLA=Hola function hola { local HOLA=Mundo echo $HOLA } echo $HOLA hola Ejemplo básico de if .. then #!/bin/bash if [ "expresión" = "valor" ]; then echo expresión evaluada como verdadera fi Condicionales con variables #!/bin/bash var1="valor1" var2="valor2" if [ "$var1" = "$var2" ]; then echo expresión evaluada como verdadera else echo expresión evaluada como falsa fi comprobando si existe un fichero #!/bin/bash FILE=~/cookies.txt if [ -f $FILE ]; then echo el fichero $FILE existe else echo fichero no encontrado fi Ejemplo usando bucles #!/bin/bash for i in $( ls ~/ ); do echo $i; done Bucles for parecido al C/perl. Este script 'emula' la conocida (C, Pascal, perl, etc) estructura `for'. #!/bin/bash for i in `seq 1 10`; do echo $i; done Ejemplo con while #!/bin/bash CONTADOR=0 while [ $CONTADOR -lt 10 ]; do echo El contador es $CONTADOR let CONTADOR=CONTADOR+1 done Ejemplo de until #!/bin/bash CONTADOR=20 until [ $CONTADOR -lt 10 ]; do echo CONTADOR $CONTADOR let CONTADOR-=1 done Ejemplo de funciones #!/bin/bash function salir { exit } function hola { echo ¡Hola Mundo! } hola salir Funciones con parámetros #!/bin/bash function salir { exit } function shell { echo $1 } shell Hola shell Mundo salir Utilizando select para hacer menús sencillos 1) Hola 2) Salir #? #!/bin/bash OPCIONES="Hola Salir" select opt in $OPCIONES; do if [ "$opt" = "Salir" ]; then echo done exit elif [ "$opt" = "Hola" ]; then echo Hola Mundo else clear echo opción errónea fi done Utilizando líneas de comandos La expresión del primer condicional comprueba si el programa ha recibido algún argumento ($1) y sale si no lo ha recibido, mostrándole al usuario un pequeño mensaje de uso #!/bin/bash if [ -z "$1" ]; then echo uso: $0 directorio exit fi ORIG=$1 DEST="/home/backups/" OF=home-$(date +%Y%m%d).tgz tar -cZf $DEST$OF $ORIG Leyendo información del usuario #!/bin/bash echo Por favor, introduzca su nombre y primer apellido read NO AP echo "¡Hola $AP, $NO!" Obteniendo el valor devuelto por un programa rv: 1 rv: 0 #!/bin/bash cd /home/noexiste &> /dev/null echo rv: $? cd $(pwd) &> /dev/null echo rv: $? Capturando la salida de un comando Este pequeño script muestra todas las tablas de todas las bases de datos (suponiendo que tenga MySQL instalado). #!/bin/bash DB=`mysql -u root -p -e "show databases"` for b in $DB ; do mysql -u root -p -e "show tables from $b"; done sed (editor de flujo) sed 's/a_sustituir/sustituto/g' /tmp/test awk (manipulación de bases de datos, extracción y proceso de texto) awk '/test/ {print}' /tmp/test grep (impresión de líneas que coinciden con un patrón de búsqueda) grep "error" /var/log/messages -c wc (cuenta líneas, palabras y bytes) wc --words --lines --bytes /tmp/test sort (ordena líneas de ficheros de texto) sort /tmp/test bc (un lenguaje de programación de cálculos matemáticos) bc -q tput (inicializa una terminal o consulta la base de datos de terminfo) La línea de comandos aparece en (y10,x4). tput cup 10 4 Limpia la pantalla y la línea de comandos aparece en (y1,x1) tput reset Muestra el número de caracteres que caben en la dirección x (80) tput cols