@Bucio: ♫ ♪ Escuchando León Larregui – Brillas http://t.co/DgaWIlJVo3

Programacion en bash

Esta fue la Ponencia que tuve, en el flisol y me gustaría compartirla, con ustedes, también puede ser descargado en pdf.

#!/bin/bash

# Programación en bash

echo Para principiantes

Flisol Tapachula Chiapas, 26|abril|2008
Rafael Rogelio Bucio Velázquez.
http://thebucio.org
Bucio[at]hackerss.com

Programación en Bash

Que es Bash ??
Bourne-Again SHell (otro shell bourne) Haciendo un juego de palabras (born-again significa renacimiento) sobre el Bourne shell (sh), que fue uno de los primeros intérpretes importantes de Unix. Hacia 1978 el shell Bourne era el shell distribuido con el Unix Version 7.

Stephen Bourne, por entonces investigador de los Laboratorios Bell, escribió el shell Bourne original . Brian Fox escribió el shell bash en 1987. En 1990, Chet Ramey se convirtió en su principal desarrollador. BASH es el shell por defecto en la mayoría de sistemas GNU/Linux, además de Mac OS X Tiger, y puede ejecutarse en la mayoría de los sistemas operativos tipo UNIX. También se ha portado a Microsoft Windows por el proyecto Cygwin. Es un Interprete de comandos. no necesita compilar :D

Stephen Bourne, por entonces investigador de los Laboratorios Bell, escribió el shell Bourne original . Brian Fox escribió el shell bash en 1987. En 1990, Chet Ramey se convirtió en su principal desarrollador. BASH es el shell por defecto en la mayoría de sistemas GNU/Linux, además de Mac OS X Tiger, y puede ejecutarse en la mayoría de los sistemas operativos tipo UNIX. También se ha aportado a Microsoft Windows por el proyecto Cygwin.

Como encontrarlo ??

Aplicaciones -> accesorios -> Terminal
Tecleamos:

im@Bucio-Ju4x0r:~$ locate bash

Para ser mas exactos:

im@Bucio-Ju4x0r:~$ which bash
/bin/bash

Que necesito saber antes de crear mi primer script?

  1. Editor de texto, gedit, vim etc..
  2. Comandos Básicos Unix.
  3. Ganas de aprender :D.

Comandos Basicos

* Cambiar el directorio de trabajo (change directory):
$ cd
* Listar el contenido de directorios (list):
$ ls
* Crear un directorio (make directory):
$ mkdir
* Borrar un directorio (remove directory):
$ rmdir
* Copiar un archivo o directorio en el directorio especificado (copy):
$ cp
* Mover un archivo o directorio a un archivo o directorio. Se utiliza también para renombrar; el origen y destino es un archivo (move):
$ mv
* Borrar archivos o directorios (remove):
$ rm <opciones> <archivo>
* Mostrar por pantalla el contenido de los archivos por la salida estándar. Si no se especifica ningún archivo, la orden repite todo lo que se ha escrito por la entrada estándar. Para indicar que se ha acabado de escribir hay que pulsar CTRL+D.
$ cat
* Buscar archivos recorriendo árboles de directorios especificados por las rutas, evaluando de izquierda a derecha las condiciones de búsqueda. Además se pueden especificar acciones sobre los resultados obtenidos:
$ find
* Mostrar el nombre del directorio en el que uno se encuentra situado (print working directory). Se dice que ese directorio es el directorio de trabajo:
$ pwd
* Cambiar los permisos de el archivo.
$chmod <PERMISOS> <ARCHIVO>
*Sacar por la salida standard (la pantalla) lo que se le pasa por parámetro, puede ser texto o una variable
$echo Hola echo hola > hola.txt

Estructura.

#!/bin/bash #! Se conoce con el nombre de Sha Bang.
/bin/bash Lo que vamos a usar ya sea bash o perl (/usr/bin/perl)
#
# Esto es un comentario
#

comando
comando
comando
…..

HOLA MUNDOOO

#!/bin/sh
echo ”Hola Mundo, cruel :’(”

EJECUTANDO EL SCRIPT.

im@Bucio-Ju4x0r:~/Conferencias/Flisol 2008/bash$ chmod -x hola.sh
im@Bucio-Ju4x0r:~/Conferencias/Flisol 2008/bash$ ./hola.sh
Hola Mundo, cruel :’(
im@Bucio-Ju4x0r:~/Conferencias/Flisol 2008/bash$

REDIRECIONES.
Existen 3 descriptores de ficheros:
stdin, stdout y stderr (std=estándar).

En los ejemplos :
El número 1 representa a stdout, y 2 a stderr.

REDIRRECIONES

Esto hará que la salida de un programa se escriba en un fichero.
stdout a un fichero

im@Bucio-Ju4x0r:~/Conferencias/Flisol 2008/bash$ ls -l > ejemplols-l.txt

Esto hará que la salida stderr de un programa se escriba en un fichero.
stderr a un fichero

im@Bucio-Ju4x0r:~/Conferencias/Flisol 2008/bash$ grep da * 2> errores-grep.txt

Esto hará que la salida stdout de un programa se escriba en el mismo descriptor de fichero que stderr.
stdout a un stderr
En este caso, la parte stdout del comando se envía a stderr.

im@Bucio-Ju4x0r:~/Conferencias/Flisol 2008/bash$ grep da * 1>&2

Esto hará que la salida stderr de un programa se escriba en el mismo descriptor de fichero que stdout.
stderr a stdout.
En este caso, la parte stderr del comando se envía a stdout

im@Bucio-Ju4x0r:~/Conferencias/Flisol 2008/bash$grep * 2>&1

TUBERÍAS

Las tuberías le permiten utilizar la salida de un programa como la entrada de otro.

enlista | entuba en sed e imprime en pantalla, todo con solo U =)

im@Bucio-Ju4x0r:~/Conferencias/Flisol 2008$ ls -l | sed -e “s/[aeio]/u/g”
tutul 524
-rwxr-xr-x 1 um bucuu 251 2008-04-26 04:25 ulurmu.sh
drwxr-xr-x 2 um bucuu 4096 2008-04-26 19:45 bush
-rw-r–r– 1 um bucuu 142551 2008-04-26 02:46 Bush.udp
-rw-r–r– 1 um bucuu 0 2008-04-26 12:28 urrurus-grup.txt
-rwxr-xr-x 1 um bucuu 55 2008-04-26 10:44 fururur.sh
drwxr-xr-x 2 um bucuu 4096 2008-04-24 18:16 umg
-rw-r–r– 1 um bucuu 129 2008-04-17 02:37 lul.sh~
-rw-r–r– 1 um bucuu 78 2008-04-13 09:35 numbru.sh~
-rw-r–r– 1 um bucuu 42207 2008-04-13 09:02 Puntulluzu-76.png
-rw-r–r– 1 um bucuu 313771 2008-04-26 02:48 prugrumucuununbush08.pdf
im@Bucio-Ju4x0r:~/Conferencias/Flisol 2008$

En este caso, la salida del programa ls -l se envía al programa grep, que imprimirá las líneas que concuerden con la regex (expresión regular) “\.txt$”

im@Bucio-Ju4x0r:~/Conferencias/Flisol 2008$ ls -l | grep “\.txt$”
-rw-r–r– 1 im bucio 0 2008-04-26 12:28 errores-grep.txt
im@Bucio-Ju4x0r:~/Conferencias/Flisol 2008$

EMPEZANDO CON LOS SCRIPTS.

Después de mostrar los comandos básicos y tuberías empece con la acción :D

VARIABLES

#!/bin/sh
nombrevariable=valor #<– declarando variable normal
nombrevariablecomando=’comando’ #<– declarando variable con valor de comando
echo $nombrevariable #<– mandando a llamar variable

VARIABLES INTRODUCIDAS POR EL TECLADO

Script nombre.sh
#!/bin/sh

echo ”hola como te llamas”
read nombre

Script read.sh
#!/bin/sh

echo ”hola como te llamas”
read nombre
echo ”Hola $nombre”

COMANDO READ
-n num_car : Número máximo de caracteres que puedes introducir por teclado
-p “frase” : Te muestra por pantalla una frase para, saber que debes introducir
-d “delimitador” : Especificas cual va a ser el delimitador, es decir si dices que el delimitador sera “;” pues todo lo que venga antes de un “;” lo cogerá una variable y todo lo que venga después de ese delimitador hasta el próximo “;” lo cogerá otra variable

read [opciones] nombre_variable1 nombre_variable2 nombre_variableN
read -p “Introduce el nombre y los apellidos” nombre apellidos

Condiciones, Operadores….

OPERADORES RELACIONALES ARITMÉTICOS
-lt (<)
-gt (>)
-le (<=)
-ge (>=)
-eq (==)
-ne (!=)

OPERADORES ARITMETICOS
+ (adición)
- (sustracción)
* (producto)
/ (división)
% (módulo)

CONDICIONES, BUCLES, CICLOS..
( If – Then )
( While )
(UNTIL)
( FOR )

IF

if [condición]
then
lista de comandos
else
lista de comandos2
fi

Script ifvariable.sh
#!/bin/bash

echo ‘ Adivina el valor numerico de la variable’
read A
if [ $A = 1 ]
then

echo ‘Acertaste’
exit 0
fi
echo
‘No acertaste’
exit

Script ifelse.sh
#!/bin/bash

echo Cual es tu Edad
read edad
if [ $edad -ge 18 ]; then
echo
eres mayor de edad
else
echo
eres menor de edad
fi

FOR
El bucle for es distinto a los de otros lenguajes de programación. Básicamente, le permite iterar sobre una serie de `palabras’ contenidas dentro de una cadena.

SCRIPT for.sh
#!/bin/bash

for i in $( ls ); do
echo item: $i
done

En la segunda línea declaramos i como la variable que recibirá los diferentes valores contenidos en $( ls ).
‘done’ indica que el código que ha utilizado el valor de $i ha acabado e $i puede tomar el nuevo valor.

WHILE
El bucle while ejecuta un trozo de códico si la expresión de control es verdadera, y sólo se para cuando es falsa (o se encuentra una interrupción explícita dentro del código en ejecución).

while [ condición ]; do

done

Script tabla.sh
#!/bin/bash

echo -n Que tabla de multiplicar desea ver
read numero
contador=1
while [ $contador -le 10 ]; do
let multi=$numero*$contador
echo $numero*$contador = $multi

let contador=$contador+1
done

let lo que hace es evaluar arithmeticamente la expresion que sigue.

UNTIL
El bucle until es casi idéntico al bucle loop, excepto en que el código se ejecuta mientras la expresión de control se evalúe como falsa.

script until.sh
#!/bin/bash

CONTADOR=20
until [ $CONTADOR -lt 10 ]; do
echo CONTADOR $CONTADOR
let CONTADOR-=1
done

FUNCIONES

Como en casi todo lenguaje de programación, puede utilizar funciones para agrupar trozos de código de una manera más lógica, o practicar el divino arte de la recursión.

Declarar una función es sólo cuestión de escribir
function mi_func { mi_código }.

script funcion.sh
1 #!/bin/bash
2 function salir {
3 exit
4 }
5 function hola {
6 echo Hola
7 }
8 hola
9 salir

script funcionvariable.sh
#!/bin/bash
function salir {
exit
}
function e {
echo $1
}
e Hola
e Mundo
salir

SELECT
El sueño de un programador para hacer menús basados en texto.
Muy similar a la construcción ‘for’, sólo que en vez de interar para cada ‘palabra’ en $OPCIONES, se lo pide al usuario.

script menuselect.sh
#!/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

BASH EN OTROS LENGUAJES

PERL
#!/bin/bash
#Llamando a un interprete externo a BASH

echo ‘El siguiente texto será mostrado por el interprete de PERL’
perl -e ‘print “Este texto es mostrado por un script PERL embebido.\n”;’
exit 0

PYTHON
#!/bin/bash
#Llamando al interprete de Python.
echo ‘El siguiente es un script de python:’
echo print “Hola, mundo!” | tee $HOME/.testpythonbash.py
python $HOME/.testpythonbash.py
exit 0

Referencias:

http://martinezcampuzano.blogspot.com/2007/08/programacion-en-bash.html
http://es.wikibooks.org/wiki/El_Manual_de_BASH_Scripting_B%C3%A1sico_para_Principiantes
http://www.guia-ubuntu.org/index.php?title=Terminal
http://buntulug.com.ar/wiki/Tutorial_de_Bash
http://es.tldp.org/COMO-INSFLUG/COMOs/Bash-Prog-Intro-COMO/

Gracias :)
Puede ser descargado de:

http://works.bucio.com.mx/talks/~talks/flisol08/programacionenbash08.pdf


 
 
 

17 comentarios en “Programacion en bash” . Deja tú comentario

  1. SaTeLuCo

    Felicidades! pasando por aqui… :P

    ResponderResponder


    abril 27, 2008 @ 4:38:
  2. Bucio

    gracias SaTeLuCo :D

    ResponderResponder


    abril 27, 2008 @ 4:49:
  3. Manuelinux

    y que onda como te fue?? veo que le agregaste muchas cosas, no seas injusto, al final tu material era para taller y no para conferencia, pero bueno, estoy trabajando en mi reseña del flisol en Guadalajara

    ResponderResponder


    abril 27, 2008 @ 11:59:
  4. Bucio

    Manuelinux, me fue bien ahaha, esque no quería dejarlos con poca información y pues me avente eso :D pero me gusto me gusto, y si me gustaría darla de nuevo, =Þ quitaría algunas cosas como lo de donde explico la parte de las re direcciones std, jejej gracias por los consejos amigo =Ð

    ResponderResponder


    abril 27, 2008 @ 13:23:
  5. haragan

    chido, pero tiene razon mauelinux, ese era materia para un tallersito y no para una conferencia; me da gusto que eventos como el FLISOL se realizen x ak, pero todavia nos falta difundir mas el S.L.; por que llegaron muy pocas personas, en mi platica de la Zalazar llegaron unos 15, en el TEC llegaron unos 10, y en la UVG unos 15; pero estuvo chido; lo malo que algunos llevaron a los latigos jejejje; como tu comprenderas y tambien zero jejeje

    ResponderResponder


    abril 27, 2008 @ 15:36:
  6. Bucio

    ja… si como no mira quien habla, tu te juiste a trabajar U_U, a mi me gusto mas la platica en el cucs ellos si se interesaron en lo que aporte también los chavos que llegaron ala utac aunque ._. eran del tec hahaha, espero que si se vuelve hacer tengamos mas publicidad :D y que se lleve a acabo esto de manera mas grande :P

    ResponderResponder


    abril 27, 2008 @ 18:46:
  7. gulxoc en Flisol 2008 : Gulxoc

    [...] http://thebucio.org/programacion-en-bash/ -> ponencia dada por Bucio Punto de vista: me gusto mas la platica en el cucs ellos si se interesaron en lo que aporte también los chavos que llegaron ala utac aunque ._. eran del tec hahaha, espero que si se vuelve hacer tengamos mas publicidad  y que se lleve a acabo esto de manera mas grande [...]



    abril 29, 2008 @ 7:08:
  8. haragan

    cual trabajar, no fui a trabajar me tome el dia pues soy patron jejeje, todo el dia estuvo en el FLISOL, en la mañana estuve en la Salazar y en el tec; despues a comer y toda la tarde me la pase en la UVG; :(

    ResponderResponder


    abril 29, 2008 @ 12:30:
  9. Bucio

    Pues hubieses avizado estabamos queriendo echar desma we :(

    ResponderResponder


    abril 29, 2008 @ 15:29:
  10. jojoko

    solo una pequena correcion: en la parte de EJECUTANDO EL SCRIPT.
    Para darle permiso de ejecucion, es +x
    :P
    Saludos

    ResponderResponder


    mayo 8, 2008 @ 17:22:
  11. Bucio

    hahasi me di cuenta :D u,u jue la emoción :D

    ResponderResponder


    mayo 9, 2008 @ 16:54:
  12. 7up

    T_________T

    ResponderResponder


    junio 9, 2008 @ 20:40:
  13. debian-ar.org » Blog Archive » Programacion en bash

    [...] Fuente Posted in Bash, Tutoriales | One Response [...]



    agosto 2, 2008 @ 17:44:
  14. efx

    Wow Muy bien Explicadin
    jaja
    esta bueno esto del bash
    para novatines komo uno esto esta perfecto
    gracias por compartir =)
    Un Saludo desde Tehuacan Pue. ;-)

    ResponderResponder


    junio 11, 2009 @ 19:23:
  15. happy-word

    Hola.. tengo un problema con un script.

    Estoy asiendo un script grafico con zenity para el cual sera ejecutado dandole doble click como un archivo normal no desde consolo…

    Por lo tanto necesito instalar paquetes y no se como hacerlo, ya que no me funciona poner esto..

    apt-get install -y $1

    cuando verifico no esta instalado, y al ser grafico no desde consola no puedo ver que esta pasando osea si se instalo o no o si no se ejecuto el comando lanzado..

    PD: El comando esta bien ya lo revise, si lo lanzo desde una terminal el script anda bien

    ResponderResponder


    septiembre 28, 2009 @ 10:41:
  16. Alevsk

    Retomare mi aprendizaje de scripter en bash :)

    salu2

    ResponderResponder


    diciembre 2, 2010 @ 0:56:
  17. Kaidd

    Muy bueno el contenido la verdad, te felicito!

    ResponderResponder


    noviembre 30, 2011 @ 18:56:

Deja tu opinión..

XHTML: Puedes usar : <a href="" title=""> <abbr title=""> <acronym title=""> <b> <blockquote cite=""> <cite> <code> <del datetime=""> <em> <i> <q cite=""> <strike> <strong>
Tsss: si no tienes gravatar lee esté post de Kozmica , para sacar uno :-).


Campus Party

Publicidad