Herramientas de usuario

Herramientas del sitio


tutoriales:bash

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
tutoriales/bash.txt · Última modificación: 2020/04/22 20:57 (editor externo)