]> git.llucax.com Git - z.facultad/75.08/llamadas.git/blob - inst/util.sh
Agrego funcion "die mensaje [cod_error]" para facil manejo de errores criticos, agreg...
[z.facultad/75.08/llamadas.git] / inst / util.sh
1 #/bin/bash
2
3 ## Los scrips que incluyan deben definir BASE_DIR antes de incluirme!
4 #BASE_DIR="$PWD"
5
6 LOCK_DIR="$BASE_DIR/lock"
7
8 # Lee del teclado un valor
9 #
10 # parámetros :
11 #  $1 = Leyeda a mostrar de pregunta
12 #  $2 = Valor default por si el usuario no ingresa nada
13 #  $3 = Variable donde guardar el valor ingresado (o el default)
14 #
15 leer () {
16         MSG=$1
17         DEFAULT=$2
18         read -p "$MSG [$DEFAULT] : " ALGO 
19         # Si el usuario no ingresa nada
20         # nos quedamos con el valor default
21         if [ ! -z "$ALGO" ] ; then
22                 eval "$3=$ALGO"
23         else
24                 eval "$3=$DEFAULT"
25         fi
26 }
27
28 # Realiza una pregunta al usuario
29 #
30 # parámetros :
31 #  $1 = Leyeda a mostrar de preguntar
32 #  $2 = string con las opciones validas
33 #  $3 = Variable donde guardar el valor ingresado
34 #
35 preguntar () {
36         PREGUNTA=$1
37         OPCIONES=$2
38         while [ true ] ; do
39                 read -p "$PREGUNTA [$OPCIONES]: " RTA
40
41                 # Escapeo el caracter '-' por '\-'
42                 RTA=$(echo $RTA | sed "s/\-/\\\-/")
43
44                 IS_OK=`echo "$OPCIONES" | grep "$RTA"`
45                 if [ ! -z "$IS_OK" ] && [ ! -z "$RTA" ] ; then
46                         eval "$3=$RTA"
47                         return 0
48                 fi
49         done
50 }
51
52 validar_solo_numeros () {
53         TEST=`echo "$1" | sed "s/[0-9]*//g"`
54         if [ "$TEST" == "" ] ; then
55                 #Ok, son solo numeros
56                 return 0
57         fi
58         # ups, hay algo que no es un numero
59         return 1
60 }
61
62 # Crea un archivo de lock para un script
63 # Devuelve: 0 si ok, 1 si ya esta lockeado, 2 si no pudo crear lock.
64 lock () {
65         # si ya esta loqueado, no lo vuelvo a crear
66         is_lock "$1" && return 1
67         # Si no puedo escribir en el dir de lock, da error
68         [ -w "$LOCK_DIR" ] || return 2
69         echo $$ > "$LOCK_DIR/$1.pid"
70         return 0
71 }
72
73 # Desbloquea el script
74 unlock () {
75         rm -rf "$LOCK_DIR/$1.pid"
76 }
77                         
78
79 # Consulta si un script esta lockeado
80 is_lock () {
81         if [ -e "$LOCK_DIR/$1.pid" ] ; then
82                 # Lock file encontrado!
83                 return 0
84         fi
85         # No hay lock file!
86         return 1
87 }
88
89 # Verifica que un valor este entre otros 2 .... $1 pertecezca  a [$2,$3]
90 # $1 Numero a validar
91 # $2 Cota inferior 
92 # $3 Cota superior
93
94 validar_rango(){
95         if [ "$1" -ge "$2" ] && [ "$1" -le "$3" ]; then
96                 return 0
97         else 
98                 return 1
99         fi
100 }
101
102 # Muestra mensaje y sale con código de error
103 # Uso: die mensaje [código de error = 1]
104 die()
105 {
106         echo "$1" >&2
107         exit ${2:-1}
108 }
109
110 # Imprime mensaje por salida de error
111 # Uso: perr mensajes
112 perr()
113 {
114         echo $@ >&2
115 }
116