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