Mostrando entradas con la etiqueta Bash Scripts. Mostrar todas las entradas
Mostrando entradas con la etiqueta Bash Scripts. Mostrar todas las entradas

miércoles, 16 de abril de 2008

Escribiendo Shell Scripts

Linux es ademas de un Sistema Operativo un lenguaje de programacion, al igual que los lenguajes de bajo u alto nivel posee caracteristicas similares tales como variables locales y globales, como ademas posee interpretes con los cuales se puede realizar programas para este Sistema Operativo.

Entre los interpretes mas comunes esta el '/bin/bash', interprete bajo el cual se trata esta entrada.

Hagamos una pequena introduccion, empecemos escribiendo un archivo simple:
admin escribió:

#!/bin/bash
# Esto es un comentario
echo "Hola " $USER ", es un placer verlo por aqui!"
echo "Usted se encuentra en: " $PWD
echo "La fecha de hoy es: "`date +"%d/%m/%Y"`


Ahora almacenas esto en un archivo llamado 'ejemplo1.sh', entonces tendras un simple shell script. Puedes correrlo de las cuatro formas siguientes:

1)Usando el comando source:
admin escribió:

fred@test:~> source ejemplo1.sh
Hola fred, es un placer verlo por aqui!
Usted se encuentra en: /home/fred
La fecha de hoy es: 05/05/1994

2)Usando el punto como el comando source:
admin escribió:

fred@test:~> . ejemplo1.sh
Hola fred, es un placer verlo por aqui!
Usted se encuentra en: /home/fred
La fecha de hoy es: 05/05/1994

3)Usando el comando bash
admin escribió:

fred@test:~> bash ejemplo1.sh
Hola fred, es un placer verlo por aqui!
Usted se encuentra en: /home/fred
La fecha de hoy es: 05/05/1994

4)Haciendo ejecutable:
admin escribió:

fred@test:~> chmod a+x ejemplo1.sh
fred@test:~> ./ejemplo1.sh
Hola fred, es un placer verlo por aqui!
Usted se encuentra en: /home/fred
La fecha de hoy es: 05/05/1994

Continuando les anexo aqui otro ejemplo:
admin escribió:

#! /bin/bash
for i in 1 2 3 4 5
do
echo $i
done
--------
fred@test:~> chmod a+x ejemplo2.sh
fred@test:~> ./ejemplo2.sh
1
2
3
4
5

Aqui les doy otro ejemplo:
admin escribió:

#! /bin/bash
for i in *.html
do
grep -i \<title\> $i >> tittles.list
done
--------
fred@test:~> chmod a+x ejemplo3.sh
fred@test:~> ./ejemplo3.sh
<title>Yahoo! Telemundo</title>

Para hacer funciones:
admin escribió:

#!/bin/bash
function Imprimir(){
echo $1
}
Imprimir "Hola Mundo"
--------
fred@test:~> chmod a+x ejemplo4.sh
fred@test:~> ./ejemplo4.sh
Hola Mundo

Para leer datos de parte del usuario hay cuatro formas:

1) Usando read:
admin escribió:

#!/bin/bash
read -p "Ingrese un valor: " -e input
echo "Su valor es: '$input'"
--------
fred@test:~> ./ejemplo5.sh
Ingrese un valor: 6
6


2) Usando dialog:
admin escribió:

#!/bin/bash
dialog --inputbox \
"Escriba un valor: " 0 0 2> /tmp/inputbox.tmp.$$
retval=$?
input=`cat /tmp/inputbox.tmp.$$`
rm -f /tmp/inputbox.tmp.$$
case $retval in
0)
echo "Su valor es: '$input'";;
1)
echo "Cancelo la operacion.";;
esac
--------
fred@test:~> ./ejemplo6.sh
<--Aun no e hecho las imagenes-->


3) Usando Xdialog:
admin escribió:

#!/bin/bash
Xdialog --title "INPUT BOX" --inputbox \
"Escriba un valor: " 0 0 2> /tmp/inputbox.tmp.$$
retval=$?
input=`cat /tmp/inputbox.tmp.$$`
rm -f /tmp/inputbox.tmp.$$
case $retval in
0)
echo "Su valor es: '$input'";;
1)
echo "Cancelo la operacion.";;
255)
echo "Cerro la ventana.";;
esac
--------
fred@test:~> ./ejemplo7.sh
<--Aun no e hecho las imagenes-->


4) Usando zenity:
admin escribió:

#!/bin/bash
input=$(zenity --text "Escriba un valor: " --entry)
retval=$?
case $retval in
0)
echo "Su valor es: '$input'";;
1)
echo "Cancelo la operacion.";;
esac
--------
fred@test:~> ./ejemplo8.sh
<--Aun no e hecho las imagenes-->


Quizas zenity sea la mejor opcion cuando tienes funcionando una X, pero cuando no dialog es la mejor opcion o read como lo mas simple para un script.
Las paginas man ofrecen mayor documentacion.


Usando ciclos:
Con los ciclos podemos hacer maravillas, tanto moviendonos de un rango a otro como usandolos para movernos en el mismo sistema, empecemos con lo basico:
admin escribió:

#!/bin/bash
for (( i=1;i<=5;i++ ));do
echo $i
done
--------
fred@test:~> ./ejemplo9.sh
1
2
3
4
5
fred@test:~> _


Haciendo algo mas complejo, mostrando si es directorio o archivo los datos contenidos en una carpeta dada:
admin escribió:

#!/bin/bash
for item in `ls $1`;do
if [[ -d $item ]];then
echo $item": Es una carpeta"
else
echo $item": Es un archivo"
fi
done
--------
fred@test:~> ./ejemplo10.sh /home/test
avion.wmv: Es un archivo
Desktop: Es una carpeta
Documents: Es una carpeta
Pictures: Es una carpeta
video.avi: Es un archivo
fred@test:~> _