InicioLinuxScripts shell útiles en cualquier programa

Scripts shell útiles en cualquier programa

Linux3/2/2012

Excelente artículo publicado en CodeNinja en el cual podemos ver pedazos de código que nos serán de utilidad para crearnos nuestros Scripts .. Se los dejo textualmente a continuación.

Bash es un programa informático cuya función consiste en interpretar órdenes. Está basado en la shell de Unix y fue escrito para el proyecto GNU siendo el intérprete de comandos por defecto en la mayoría de las distribuciones de GNU/Linux. Su nombre es un acrónimo 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 intérpretes importantes de Unix.

Hoy vamos a mostrar algunos scripts de shell que pueden ser de gran utilidad para los desarrolladores. La mayoría funcionan en cualquier shell de Unix, aunque algunos requieren que sean ejecutados específicamente por Bash .

Evitar que usuarios sin privilegios ejecuten el script

Algunos scripts realizan tareas administrativas por lo cual podríamos 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 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í:

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


Cambiar donde dice usuario_permitido por el nombre de usuario que corresponda



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):

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

#!/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é pasaría si mientras nuestro script se está ejecutando es cerrado abruptamente?

En ese caso el archivo de bloqueo no se borraría, y por lo tanto, no nos permitiría ejecutar el script de nuevo. Para cubrir esos casos, podríamos hacer uso del comando trap que nos permite ejecutar comandos en caso que nuestro script termine de manera inesperada. Esta es una versión más avanzada que además 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 básicamente esta: trap comando signal [signal ...]; donde signal es la señal de terminación 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 terminación producida por un Ctrl+c), TERM (terminación producida por el comando kill) y EXIT (terminación normal de un script, bien sea porque ya no hay más líneas 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 confirmación antes de ejecutar un script

A veces es útil hacer que el usuario confirme la ejecución de un lote de sentencias, es decir, el típico 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"  ;) 



No he probado toods los scripts pero al parecer no veo errores, si alguien detecta alguno que lo comente y edito el post



Post creado con PosT!NGA
Datos archivados del Taringa! original
100puntos
486visitas
0comentarios
Actividad nueva en Posteamelo
0puntos
8visitas
0comentarios
Dar puntos:

Dejá tu comentario

0/2000

Autor del Post

M
MukenioArg🇦🇷
Usuario
Puntos0
Posts442
Ver perfil →
PosteameloArchivo Histórico de Taringa! (2004-2017). Preservando la inteligencia colectiva de la internet hispanohablante.

CONTACTO

18 de Septiembre 455, Casilla 52

Chillán, Región de Ñuble, Chile

Solo correo postal

© 2026 Posteamelo.com. No afiliado con Taringa! ni sus sucesores.

Contenido preservado con fines históricos y culturales.