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
[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
