Está en la página 1de 6

Cdigos de shell script tiles en cualquier programa Linux, Java y pr...

http://casidiablo.net/codigos-de-shell-script-utiles/

gentoo linux, java, software libre y otras hierbas $HOME casidiablo.tv Autor Contribuir Java C# y .NET

Sgueme...

casidiablo.net
Me gusta 1,106

casidiablo.net en Facebook

Contacto

Lo que leo
Baratijas Blog Be Linux My Friend Bloguear por bloguear Casidiablo Media El Blog de Guapacho El blog de Marvin y familia El camino geek GWT en espaol Linux Hispano LuAuF Nierox Pllate un Linux Programacin PHP, Java y C++ Programando Ideas Rincn Informtico rm -rf Ubuntu Tips Youtube

Buscar...

1 de 6

20/10/2011 01:17 p.m.

Cdigos de shell script tiles en cualquier programa Linux, Java y pr...

http://casidiablo.net/codigos-de-shell-script-utiles/

Publicidad

ene, 26 2010 - 11:23 pm

Cdigos de shell script tiles en cualquier programa

A continuacin voy a poner algunos snippets de cdigo de shell script que me han sido siempre tiles cuando escribo algn script. La mayor funcinoan en cualquier shell de Unix, aunque algunos requieren que sean ejecutados por Bash.

tweets

retweet retweet

Evitar que usuarios sin privilegios ejecuten el script


Algunos scripts realizan tareas administrativas por lo cual podramos querer que solo el usuario root ejecute el script. En ese caso podemos usar algo como esto: 1 2 3 4 5 #!/bin/bash if [[ $EUID -ne 0 ]]; then echo "Este script debe ser ejecutado por el usuario root" 1>&2 exit 1 fi
?

Permitir la ejecucin del script solo a un usuario especfico


De manera similar al cdigo anterior, podramos querer que solo un usuario especfico ejecute el script. Lo hacemos as: 1 2 3 4 5 6 #!/bin/bash AUTHORIZED_USER="usuario_permitido" if [ $USER != $AUTHORIZED_USER ]; then echo "Este script debe ser ejecutado por el usuario $AUTHORIZED_USER" 1>&2 exit 1 fi
?

Verificar que un servicio/proceso se est ejecutando


Si queremos saber si existen procesos de algn servicio o programa ejecutndose podramos usar este script (en este caso verifica que el demonio de Apache est corriendo): 1 2 3 4 5 6 7 8 #!/bin/sh SERVICE='httpd' if ps ax | grep -v grep | grep $SERVICE > /dev/null then echo "El servicio $SERVICE esta ejecutandose" else echo "Chanfle! El servicio $SERVICE esta detenido" fi
?

Verificar que una variable est asignada/tenga datos


Hay bastantes maneras de hacer esto en shell script la que considero ms sencilla y concisa es esta: 1 2 3 4 #!/bin/bash FOO= : ${FOO:?"No existe la variable FOO o no tiene <span class="IL_AD" id="IL_AD10">datos</span>"} echo "esto nunca se va a <span class="IL_AD" id="IL_AD9">imprimir</span>"
?

El anterior script verifica si una variable existe y tiene datos; si esto no se cumple, el script se cierra. Podemos usar esta variacin en donde solo comprobamos que la variable exista, sin importar si tiene datos o no: 1 2 3 #!/bin/bash FOO= : ${FOO?"No existe la variable FOO"}
?

2 de 6

20/10/2011 01:17 p.m.

Cdigos de shell script tiles en cualquier programa Linux, Java y pr...

http://casidiablo.net/codigos-de-shell-script-utiles/

echo "esto si se va a imprimir"

Crear un archivo de bloqueo


A veces debemos asegurarnos que el script no se ejecute dos o ms veces simultneas. Para ello podemos hacer uso de los archivos de bloqueo. Esta es una versin sencilla de un script que nos permite hacer esto: 1 2 3 4 5 6 7 8 9 #!/bin/bash lockfile=/var/lock/loquesea.lock if [ ! -e $lockfile ]; then touch $lockfile echo "hago muchas cosas importantes aqui" rm $lockfile else echo "ya hay otro proceso corriendo" fi
?

En este caso, se verifica que el archivo loquesea.lock exista. En caso de que exista, el script NO ejecuta sus tareas. Si no existe, crea el archivo, ejecuta las tareas que deba ejecutar y lo elimina. Pero, esto no es del todo fiable. Qu pasara si mientras nuestro script se est ejecutando es cerrado abruptamente (con Ctrl^c por ejemplo)? En ese caso el archivo de bloqueo no se borrara, y por lo tanto, no nos permitira ejecutar el script de nuevo. Para cubrir esos casos, podramos hacer uso del comando trap que nos permite ejecutar comandos en caso que nuestro script termine de manera inesperada. Esta es una versin ms avanzada que adems guarda dentro del archivo de bloqueo el PID del script que lo ejecuta: 01 02 03 04 05 06 07 08 09 10 11 12 #!/bin/bash lockfile=/var/lock/loquesea.lock if ( set -o noclobber; echo "$$" > "$lockfile") 2> /dev/null; then trap 'rm -f "$lockfile"; exit $?' INT TERM EXIT echo "hago muchas cosas aqui tranquilamente" rm -f "$lockfile" trap - INT TERM EXIT else echo "Ya hay otro proceso de este script ejecutandose" echo "corriendo con el PID: $(cat $lockfile)" fi
?

Entendamos un poco mejor el comando trap. La sintaxis del mismo es bsicamente esta: trap comando signal [signal ...]; donde signal es la seal de terminacin que quieres atrapar. Si quieres ver una lista de los signals disponibles puedes ejecutar el comando kill -l. Para el caso anterior se usaron los signals INT (captura la terminacin producida por un Ctrl^c), TERM (terminacin producida por el comando kill) y EXIT (terminacin normal de un script, bien sea porque ya no hay ms lneas que ejecutar o porque se encuentra con el comando exit).

Men de opciones
Para hacer un men en donde permitimos al usuario seleccionar una serie de opciones podemos usar el siguiente esquema: 01 02 03 04 05 06 07 08 09 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 #!/bin/bash clear while : do echo " Escoja una opcion " echo "1. quien soy?" echo "2. cuanto <span class="IL_AD" id="IL_AD11">espacio</span> tengo" echo "3. que es esto?" echo "4. Salir" echo -n "Seleccione una opcion [1 - 4]" read opcion case $opcion in 1) echo "este eres:"; whoami;; 2) echo "tienes esto"; df;; 3) uname -r;; 4) echo "chao pues parcero"; exit 1;; *) echo "$opc es una opcion invalida. Es tan dificil?"; echo "Presiona una tecla para continuar..."; read foo;; esac done
?

Pedir confirmacin antes de ejecutar un script


A veces es til hacer que el usuario confirme la ejecucin de un lote de sentencias, es decir, el tpico mensaje que pide al usuario escribir yes o no. Esto lo podemos hacer as: 01 02 #!/bin/bash while true; do
?

3 de 6

20/10/2011 01:17 p.m.

Cdigos de shell script tiles en cualquier programa Linux, Java y pr...

http://casidiablo.net/codigos-de-shell-script-utiles/

03 04 05 06 07 08 09 10 11

echo read -p "esta seguro de hacer lo que sea que <span class="IL_AD" id="IL_AD8">vaya</span> a hacer " yn case $yn in yes ) <span class="IL_AD" id="IL_AD12">break</span>;; no ) exit;; * ) echo "por favor responda yes o no";; esac done echo "si se ejecuta esto es que aceptaste"

Fuentes de informacin
StackOverflow - La ms valiosa sin duda alguna Writing Robust Bash Shell Scripts nixCraft
Sistema de Remuneraciones El software lder en Sueldos y Administracin de RRHH www.payroll.com.ar Juegos para Celular Compatibles con todos los Modelos de Celular, Ac! P/Suscr $1.50/SMS www.Renxo.com Soluciones OpenERP Consultoria, Capacitacion y Soporte SapBasis, OpenERP, Tryton y HIS www.thymbra.com

19 Comentarios | deja el tuyo

3 enlaces entrantes
Bitacoras.com Tweets that mention Cdigos de shell script tiles en cualquier programa Linux, Java y programacin -- Topsy.com Linux Hispano | Lo mejor de mi RSS del 25 al 31 de Enero de 2010

16 Comentarios en Cdigos de shell script tiles en cualquier programa


Comentarios anteriores 1. piponazo dice: enero 27, 2010 a las 10:59 am Muy buena entrada Responder 2. edu dice: enero 27, 2010 a las 2:17 pm Hola, Muy interasante. Gracias Responder 3. Tech & Freak Feeds dice: enero 27, 2010 a las 4:05 pm Cdigos shell script utiles en cualquier programa http://feedproxy.google.com/~r/casidiablo/~3/k0mMT1SI7xA/ Responder 4. jorge dice: enero 31, 2010 a las 1:01 am otra forma de crear menus sin usar tanto echo es: echo 1.opcion 2.opcion . . .

4 de 6

20/10/2011 01:17 p.m.

Cdigos de shell script tiles en cualquier programa Linux, Java y pr...

http://casidiablo.net/codigos-de-shell-script-utiles/

En bash el , le indica que debe imprimir eso tal cual esta Responder Cristian dice: enero 31, 2010 a las 1:16 am Gracias por la sugerencia jorge lo tendr en cuenta. Un saludo! Responder 5. jorge dice: enero 31, 2010 a las 1:19 am ok, y tambien gracias a ti ya que no se me habia ocurrido lo de EUID. Gracias Responder 6. Sirius dice: febrero 5, 2010 a las 9:55 am Muy interesante y til. a ver cuando me pongo a programar otra vez Responder 7. carnicero dice: febrero 12, 2010 a las 11:36 am Carnal estoy empesando en el mundo de shell, me puedes recomendar algun sitio? o algun libro de descarga gratuita, graicas Responder Cristian dice: febrero 12, 2010 a las 11:59 am Nada como una lectura fresca offline hay bastantes libros, te recomiendo este: http://casidiablo.in/d7SS6a Un saludo! Responder 8. Miguel dice: febrero 12, 2010 a las 11:44 am Esta muy clara tu explicacin , es muy buen aporte a la comunidad, sigue asi. Gracias Responder Cristian dice: febrero 12, 2010 a las 12:00 pm Gracias por tu comentario Miguel y espero seguir aportando segn tenga tiempo Un saludo! Responder 9. neckro dice: marzo 8, 2010 a las 12:06 pm Hola, queria saber si tu eres experto en alguna de estas materias en Linux: Shellscripts ,awk, ficheros en C, procesos en c, etc para poder ayudarme con unos ejercicios maana. gracias de antemano! Mi correo es gabri27@hotmail.com, escribeme si tienes conocimientos buenos en algo de lo mencionado arriba, porfavor! Responder 10. samuel dice: abril 29, 2010 a las 10:24 am

5 de 6

20/10/2011 01:17 p.m.

Cdigos de shell script tiles en cualquier programa Linux, Java y pr...

http://casidiablo.net/codigos-de-shell-script-utiles/

ola buenas queria saber el codigo de un script para cambiarte de directorio es decir con el cd. si puedes echarme una mano samuredon@hotmail.com Responder 11. Pablo dice: junio 3, 2010 a las 2:28 pm Joya, muy util!! Responder 12. Leo Gutirrez R. dice: octubre 31, 2010 a las 10:56 pm Tambin se puede comprobar si un proceso est ejecutdose as: ps aux | grep -v grep | grep -i firefox > /dev/null &Saludos. Responder 13. Carlos dice: junio 5, 2011 a las 10:50 am Hola! Me podras ayudas con lo siguiente? Tengo que recargar ALSA cada que prendo el pc,como hago un script que al ejecutarse no me pida mi contrasea? Al ejecutar el script que tengo pide autenticacin. Responder

Djanos tu comentario!
Tu nombre Homepage E-mail (para Gravatar) Tu comentario

2006 - 2010 casidiablo.net. Pocos derechos reservados.

6 de 6

20/10/2011 01:17 p.m.