Вы находитесь на странице: 1из 4

Scripts shell tiles en cualquier programa

Por elav < Linux 2 marzo, 2012Publicado en: GNU/Linux, Terminal, Tutoriales/Manuales/Tips Excelente artculo publicado en CodeNinja en el cual podemos ver pedazos de cdigo que nos sern de utilidad para crearnos nuestros Scripts.. Se los dejo textualmente a continuacin. Bash es un programa informtico cuya funcin consiste en interpretar rdenes. Est basado en la shell de Unix y fue escrito para el proyecto GNU siendo el intrprete de comandos por defecto en la mayora de las distribuciones de GNU/Linux. Su nombre es un acrnimo de 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 intrpretes importantes de Unix. Hoy vamos a mostrar algunos scripts de shell que pueden ser de gran utilidad para los desarrolladores. La mayora funcionan en cualquier shell de Unix, aunque algunos requieren que sean ejecutados especficamente por Bash.

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: #!/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: #!/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): #!/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

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: #!/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? 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: #!/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: #!/bin/bash clear while : do echo " Escoja una opcion " echo "1. quien soy?" echo "2. cuanto espacio 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"; 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: #!/bin/bash while true; do echo read -p "esta seguro de hacer lo que sea que vaya a hacer " yn case $yn in yes ) break;; no ) exit;; * ) echo "por favor responda yes o no";; esac done echo "si se ejecuta esto es que aceptaste"

Fin del artculo. Sencillamente genial Edito: Hay que tener cuidado con los espacios y tabulaciones, que por algn motivo, no me estn saliendo

Вам также может понравиться