Página 1 de 1

Ejemplos en BASH

Publicado: Mar, 31 May 2011, 14:59
por N@RuTo_Sagi
Nota:En este Post pretendo ayudarles mediante ejemplos a comenzar a programar shell scripts a un nivel básico...

Clásico script `hola mundo'
Codigo:
#!/bin/bash
echo Hola Mundo


Sencillo Script para copia de seguridad
Codigo:
#!/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.
Codigo:
ls -l > ls-l.txt


stderr a un fichero
Esto hará que la salida stderr de un programa se escriba en un fichero.
Codigo:
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.
Codigo:
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.
Codigo:
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.
Codigo:
rm -f $(find / -name core) &> /dev/null


Una tubería sencilla con sed
Ésta es una manera muy sencilla de utilizar tuberías.
Codigo:
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.
Codigo:
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.
Codigo:
#!/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
Codigo:
#!/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

Codigo:
#!/bin/bash
HOLA=Hola
function hola {
local HOLA=Mundo
echo $HOLA
}
echo $HOLA
hola


Ejemplo básico de if .. then
Codigo:
#!/bin/bash
if [ "expresión" = "valor" ]; then
echo expresión evaluada como verdadera
fi



Condicionales con variables
Codigo:
#!/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
Codigo:
#!/bin/bash
FILE=~/cookies.txt
if [ -f $FILE ]; then
echo el fichero $FILE existe
else
echo fichero no encontrado
fi


Ejemplo usando bucles
Codigo:
#!/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'.
Codigo:
#!/bin/bash
for i in `seq 1 10`; do echo $i; done


Ejemplo con while
Codigo:
#!/bin/bash
CONTADOR=0
while [ $CONTADOR -lt 10 ]; do
echo El contador es $CONTADOR
let CONTADOR=CONTADOR+1
done


Ejemplo de until
Codigo:
#!/bin/bash
CONTADOR=20
until [ $CONTADOR -lt 10 ]; do
echo CONTADOR $CONTADOR
let CONTADOR-=1
done


Ejemplo de funciones
Codigo:
#!/bin/bash
function salir {
exit
}
function hola {
echo ¡Hola Mundo!
}
hola
salir


Funciones con parámetros
Codigo:
#!/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
#?
Codigo:
#!/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
Codigo:
#!/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
Codigo:
#!/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
Codigo:
#!/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).
Codigo:
#!/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)
Codigo:
sed 's/a_sustituir/sustituto/g' /tmp/test


awk (manipulación de bases de datos, extracción y proceso de texto)
Codigo:
awk '/test/ {print}' /tmp/test


grep (impresión de líneas que coinciden con un patrón de búsqueda)
Codigo:
grep "error" /var/log/messages -c


wc (cuenta líneas, palabras y bytes)
Codigo:
wc --words --lines --bytes /tmp/test


sort (ordena líneas de ficheros de texto)
Codigo:
sort /tmp/test


bc (un lenguaje de programación de cálculos matemáticos)
Codigo:
bc -q


tput (inicializa una terminal o consulta la base de datos de terminfo)
La línea de comandos aparece en (y10,x4).
Codigo:
tput cup 10 4

Limpia la pantalla y la línea de comandos aparece en (y1,x1)
Codigo:
tput reset

Muestra el número de caracteres que caben en la dirección x (80)
Codigo:
tput cols



Mas adelante agrego mas...
Salud2s...

Re: Ejemplos en BASH

Publicado: Mar, 31 May 2011, 16:50
por hugo
Esto encajaría mejor en la Wiki, anímate a contribuirlo allí.

Re: Ejemplos en BASH

Publicado: Vie, 17 Jun 2011, 17:19
por dcruz
hugo escribió:Esto encajaría mejor en la Wiki, anímate a contribuirlo allí.
Bueno ya está... lo que le falta un poco de formato.. :|

http://gutl.jovenclub.cu/wiki/tutoriales:bash

Saludos.

Re: Ejemplos en BASH

Publicado: Sab, 18 Jun 2011, 07:34
por hugo
Gracias, yo ahora mismo estoy bastante corto de tiempo pero en cuanto pueda pretendo reservar algunos días para dar formato a algunos artículos, colocar otros y quizás reestructurar un poco la Wiki.

De todas formas otros pueden mejorar el formato, si así lo desean. La ayuda es bienvenida.