1 #!

/bin/bash 2 if [[ $EUID -ne 0 ]]; then 3 echo "Este script debe ser ejecutado por el usuario root" 1>&2 4 exit 1 5 fi
Permitir la ejecución del script solo a un usuario específico De manera similar al código anterior, podríamos querer que solo un usuario específico ejecute el script. Lo hacemos así:

1 #!/bin/bash 2 AUTHORIZED_USER="usuario_permitido" 3 if [ $USER != $AUTHORIZED_USER ]; then echo "Este script debe ser ejecutado por el usuario 4 $AUTHORIZED_USER" 1>&2 5 exit 1 6 fi
Verificar que un servicio/proceso se está ejecutando Si queremos saber si existen procesos de algún servicio o programa ejecutándose podríamos usar este script (en este caso verifica que el demonio de Apache esté corriendo):

1 #!/bin/sh 2 SERVICE='httpd' 3 if ps ax | grep -v grep | grep $SERVICE > /dev/null 4 then 5 echo "El servicio $SERVICE esta ejecutandose" 6 else 7 echo "Chanfle! El servicio $SERVICE esta detenido" 8 fi
Verificar que una variable esté asignada/tenga datos Hay bastantes maneras de hacer esto en shell script… la que considero más sencilla y concisa es esta:

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

1 #!/bin/bash 2 FOO= 3 : ${FOO?"No existe la variable FOO"} 4 echo "esto si se va a imprimir"
Crear un archivo de bloqueo A veces debemos asegurarnos que el script no se ejecute dos o más veces simultáneas. Para ello podemos hacer uso de los archivos de bloqueo. Esta es una versión sencilla de un script que nos permite hacer esto:

. La sintaxis del mismo es básicamente esta: trap comando signal [signal . 04 then 05 trap 'rm -f "$lockfile". En caso de que exista. esto no es del todo fiable. ejecuta las tareas que deba ejecutar y lo elimina. se verifica que el archivo loquesea.INT TERM EXIT 09 else 10 echo "Ya hay otro proceso de este script ejecutandose" 11 echo "corriendo con el PID: $(cat $lockfile)" 12 fi Entendamos un poco mejor el comando trap.1 #!/bin/bash 2 lockfile=/var/lock/loquesea. exit $?' INT TERM EXIT 06 echo "hago muchas cosas aqui tranquilamente" 07 rm -f "$lockfile" 08 trap . el script NO ejecuta sus tareas. Si no existe. donde signal es la señal de terminación que quieres atrapar.].. Pero. crea el archivo. no nos permitiría ejecutar el script de nuevo. ¿Qué pasaría si mientras nuestro script se está ejecutando es cerrado abruptamente (con Ctrl^c por ejemplo)? En ese caso el archivo de bloqueo no se borraría. podríamos hacer uso del comando trap que nos permite ejecutar comandos en caso que nuestro script termine de manera inesperada.lock 03 if ( set -o noclobber.lock exista. Esta es una versión más avanzada que además guarda dentro del archivo de bloqueo el PID del script que lo ejecuta: 01 #!/bin/bash 02 lockfile=/var/lock/loquesea. Para el caso anterior se usaron los signals INT (captura la terminación producida por un Ctrl^c). then 4 touch $lockfile 5 echo "hago muchas cosas importantes aqui" 6 rm $lockfile 7 else 8 echo "ya hay otro proceso corriendo" 9 fi En este caso. TERM (terminación producida por el comando kill) y EXIT (terminación normal de un script. y por lo tanto. Si quieres ver una lista de los signals disponibles puedes ejecutar el comando kill -l. Menú de opciones Para hacer un menú en donde permitimos al usuario seleccionar una serie de opciones podemos usar el siguiente esquema: 01 #!/bin/bash 02 clear 03 while : 04 do 05 echo " Escoja una opcion " 06 echo "1. quien soy?" . bien sea porque ya no hay más líneas que ejecutar o porque se encuentra con el comando exit). echo "$$" > "$lockfile") 2> /dev/null.lock 3 if [ ! -e $lockfile ]. Para cubrir esos casos.

do 03 echo 04 read -p "esta seguro de hacer lo que sea que vaya a hacer " yn 05 case $yn in 06 yes ) break...". 18 4) echo "chao pues parcero".. Esto lo podemos hacer así: 01 #!/bin/bash 02 while true. que es esto?" 09 echo "4... 07 no ) exit.. Salir" 10 echo -n "Seleccione una opcion [1 . es decir. 09 esac 10 done 11 echo "si se ejecuta esto es que . 14 whoami.07 echo "2.. 21 echo "Presiona una tecla para continuar. 19 exit 1. el típico mensaje que pide al usuario escribir yes o no.. 16 df.4]" 11 read opcion 12 case $opcion in 13 1) echo "este eres:". 15 2) echo "tienes esto".. 08 * ) echo "por favor responda yes o no".. cuanto espacio tengo" 08 echo "3. 17 3) uname -r. 23 esac 24 done Pedir confirmación antes de ejecutar un script A veces es útil hacer que el usuario confirme la ejecución de un lote de sentencias. 22 read foo. 20 *) echo "$opc es una opcion invalida. Es tan dificil?".