Bienvenido a la wiki dedicada a los usuarios nuevos en GNU/Linux, este sitio esta orientado a ayudar a los usuarios nuevos... Si deseas contribuir, por favor crate una cuenta.

Tutorial de Bash

De PUFs Wiki

Tabla de contenidos

[editar] Shell: aquel desconocido

Nota: El signo "$" indica tecleo directo en consola de los comandos y parámetros.

[editar] ¿Qué es un shell?

  • El shell es un interprete de comandos.
  • Pero también es un lenguaje.
  • El conjunto de comandos es un script.
  • Un script sirve como 'pegamento' de diversos comandos sencillos, que en conjunto son considerablemente poderosos.

[editar] ¿Por qué aprender a programarlo?

  • Te evita hacer tareas repetitivas.
  • Es bueno conocerlos, algún dia resolverá algun problema como con los scripts en /etc/rc.d.
  • Es fácil de aprender: piensa que quieres hacer - escribelo - revisalo (ahora ponlo todo en un archivo o script).
  • Usualmente no tienes que debugear mucho, es como si vaciaras lo que harías en el prompt de comandos, pero escrito en un archivo.
  • Es ideal para hacer algunos prototipos.
  • Es muy *NIX: Keep It Simple Stupid! (divide y venceras).

[editar] No se use en caso de...

  • Hacer matemáticas intensas - Use Fortran (sí, aún existe).
  • Requerir super portabilidad - Use Java, .NET o 'C'.
  • Aplicaciones complejas - Por ejemplo, que requieran estructuras mas elaboradas.
  • Aplicaciones de misión crítica.
  • Requerir estructuras de datos 'elegantes' - Listas enlazadas, árboles.
  • Crear Aplicaciones propietarias - Es difícil de ofuscar :).

[editar] API de shell

[editar] API de shell

  • Todo comando de *nix puede ser invocado.
  • Comandos de testing.
  • loops - ciclos.
  • Tus propios programas o scripts son parte del API!

[editar] ¿Cómo creo un script?

  • Crea un archivo miscript.sh con tu editor de textos favorito.
  • Dale permisos de ejecuci\'on: $chmod +x miscript.sh.
  • Ejecutalo: $./miscript.sh
  • Listo!
  • En serio, eso es todo. :).

[editar] Ejemplo

 #!/bin/bash
 echo 'Hello world'

[editar] Corriendo el script

  • Guardarlo en el archivo script.sh
$chmod +x script.sh
 $./script.sh

[editar] Ejemplo

#!/bin/bash
 DATE=`date +%d-%m-%y`                                                                                                  
 USER=foobar
 echo 'Comenzando el backup'
 tar cjvf /tmp/$USER-$DATE.tbz /home/foobar
 echo 'Backup terminado'

[editar] Redireccionando

  • Redireccionar stdout a un archivo.
  • Redireccionar stderr a un archivo.
  • Redireccionar stdout a stderr.
  • Redireccionar stderr a stdout.
  • Redireccionar stdout y stderr a un archivo.

[editar] Ejemplo de redireccionamiento

 $ls -l >ls-l.txt

[editar] Ejemplo de redireccionamiento

 $grep da * 2> grep-errors.txt

[editar] Ejemplo de redireccionamiento

 $grep da * 1>&2 grep-errors.txt

[editar] Ejemplo de redireccionamiento

 $grep * 2>&1

[editar] Ejemplo de redireccionamiento

 $rm -f $(find / -name core) &> /dev/null

[editar] Tuberias o Pipes

  • Una tuberia sirve para redireccionar la salida de un comando a la entrada de otro.
  • Por omision, la salida estandar sera redireccionada a la entrada estandar del otro programa.

[editar] Ejemplo de tuberia

 $ls -l | grep "\.txt$ 

[editar] Variables

  • Las variables no necesitan ser declaradas.
  • Son dinámicas además (no tienes que 'alojar' memoria).

[editar] Ejemplo Hola mundo! meet variables

 #!/bin/bash
 STR=''Hello world!''
 echo $STR

[editar] Ejemplo de Respaldo

 #!/bin/bash
 OF=/var/my-backup-$(date +%Y%m%d).tgz                                                                                  
 tar -cZf $OF /home/me/

[editar] Ejemplo de Hola mundo! con funciones

 #!/bin/bash 
 HELLO=Hello
 function hello {
          local HELLO=World
          echo $HELLO                                                                                                   
 }                                                                                                                      
 echo $HELLO
 hello
 echo $HELLO

[editar] Condicionales

  • Tenemos if's en bash! Con diferentes sabores.
  • if expression then statement.
  • if expression then statement1 else statement2.
  • if expression1 then statement1 else if expression2 then statement2 else statement3.

[editar] Ejemplo de if-then

 #!/bin/bash
 if [ ``foo'' = ``foo'' ]; then
    echo ``Cierto, foo == foo''
 fi

[editar] Ejemplo de if-then-else

 #!/bin/bash
 if [ ``foo'' = ``foo'' ]; then
    echo ``Cierto, foo == foo''
 else
    echo ``Era falsa''
 fi

[editar] Cuando las variables y condicionales se encuentran

 #!/bin/bash
 T1=''foo''
 T2=''bar''
 if [ $T1 = $T2 ]; then
    echo ``Cierto, ``$T1''== ``$T2
 else
    echo ``No es cierto''
 fi

[editar] -Fruit- Loops err... ciclos

  • for - es un poco diferente, puedes iterar sobre cadenas o palabras en las cadenas.
  • while - ejecuta un pedazo de codigo si una condicion se cumple, y para cuando es falsa.
  • until - ejecuta un pedazo de codigo, hasta que una expresion sea falsa.
  • Cuide sus expresiones, no vaya a caer en un ciclo infinito.

[editar] Ejemplo Mi primer for

 #!/bin/bash
 for i in $( ls ); do                                                                                                   
     echo item: $i
 done

[editar] Ejemplo Mira mamá, como en C

 #!/bin/bash
 for i in `seq 1 10`;
 do
    echo $i                                                                                                             
 done

[editar] Ejemplo del while

 #!/bin/bash
 COUNTER=0
 while [  $COUNTER -lt 10 ]; do                                                                                         
   echo The counter is $COUNTER
   let COUNTER=COUNTER+1
 done

[editar] ¡Hey! ¿qué era eso de let?

  • Note el uso de let, let lo que hace es evaluar arithmeticamente la expresion que sigue.
  • Para mas en expresiones aritmeticas, da: 'man bash' y busca ARITHMETIC EVALUATION.

[editar] Ejemplo del until

 #!/bin/bash
 COUNTER=20
 until [  $COUNTER -lt 10 ];                                                                                            
 do                                                                                                                     
   echo COUNTER $COUNTER
   let COUNTER-=1
 done

[editar] Funciones

  • Para hacer los programas ordenados.
  • Para reusar codigo.
  • Para ser recursivo.

[editar] Ejemplo de funcion

 #!/bin/bash
 function quit {
   exit
 }
 function hello {
   echo Hello!
 }
 hello
 quit
 echo foo

[editar] Ejemplo de funciones con argumentos

 #!/bin/bash
 function quit {
    exit
 }
 function e {
    echo $1                                                                                                             
 }                                                                                                                       
 e Hello                                                                                                                
 e World                                                                                                                
 quit                                                                                                                   
 echo foo

[editar] Haciendo un menú

  • Podemos hacer un menu en shell!

[editar] Menu simple

 #!/bin/bash
 OPTIONS=''Hello Quit''
 select opt in $OPTIONS; do                                                                                             
   if [ ``$opt'' = ``Quit'' ]; then
      echo done
      exit
   elif [ ``$opt'' = ``Hello'' ]; then                                                                                  
      echo Hello World                                                                                                  
   else                                                                                                                 
      clear                                                                                                             
      echo bad option                                                                                                   
   fi                                                                                                                   
 done

[editar] Revisando argumentos

  • Para completar el menu, tenemos forma de revisar los argumentos!

[editar] Ejemplo Mira mamá, con argumentos!

 #!/bin/bash
 if [ -z ``$1'' ]; then                                                                                                 
    echo usage: $0 directory
    exit 
 fi
 SRCD=$1                                                                                                                
 TGTD=''/var/backups/''                                                                                                 
 OF=home-$(date +%Y%m%d).tgz                                                                                            
 tar -cZf $TGTD$OF $SRCD                                                                                                
 done

[editar] Leyendo entradas de los usuarios

  • Podemos leer entradas 'interactivas' del usuario.
  • Notan que podemos hacer un facil juego en BASH?
  • Si, un juego en texto :).

[editar] Ejemplo de read

 #!/bin/bash
 echo Por favor, meta su nombre
 read NAME
 echo ``Hi $NAME!''

[editar] Ejemplo + reads

 #!/bin/bash
 echo Por favor, meta su nombre y apellido
 read FN LN
 echo ``Hi! $LN, $FN !''

[editar] Usando bash como calculadora

  • Uno puede hacer uso del sistema de expresiones aritmeticas de bash.
  • Si hacen algo como: echo 1+1 - no obtendran los resultados adecuados (bash interpretara 1+1 como cadena, y como tal, la imprimira).
  • Se puede hacer: echo \$((1+1)).
  • Se puede hacer: echo \$[1+1].
  • Solo funciona con enteros. Si necesita algo mas alla de ello, use bc.

[editar] Si necesita uno debugear

  • Use #!/bin/bash -x

[editar] Mas recursos


Extraido de: LIDSOL

Herramientas personales