]> git.llucax.com Git - z.facultad/75.08/llamadas.git/blob - inst/util.sh
Se agrega opción para poner un valor por defecto cuando se apreta ENTER a pretuntar().
[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 #  $4 = Valor por defecto si se apreta ENTER
35 #
36 preguntar () {
37         PREGUNTA="$1"
38         OPCIONES="$2"
39         DEFAULT="$4"
40         while true; do
41                 read -p "$PREGUNTA [$OPCIONES]: " RTA
42
43                 # Si me pasaron un default y la respuesta es vacía
44                 if [ -n "$DEFAULT" -a -z "$RTA" ]; then
45                         # devuelvo default
46                         RTA="$DEFAULT"
47                         return 0
48                 fi
49
50                 # Escapeo el caracter '-' por '\-'
51                 RTA=$(echo $RTA | sed "s/\-/\\\-/")
52
53                 IS_OK=`echo "$OPCIONES" | grep "$RTA"`
54                 if [ ! -z "$IS_OK" ] && [ ! -z "$RTA" ] ; then
55                         eval "$3=$RTA"
56                         return 0
57                 fi
58         done
59 }
60
61 validar_solo_numeros () {
62         TEST=`echo "$1" | sed "s/[0-9]*//g"`
63         if [ "$TEST" == "" ] ; then
64                 #Ok, son solo numeros
65                 return 0
66         fi
67         # ups, hay algo que no es un numero
68         return 1
69 }
70
71 # Crea un archivo de lock para un script
72 # Devuelve: 0 si ok, 1 si ya esta lockeado, 2 si no pudo crear lock.
73 lock () {
74         # si ya esta loqueado, no lo vuelvo a crear
75         is_lock "$1" && return 1
76         # Si no puedo escribir en el dir de lock, da error
77         [ -w "$LOCK_DIR" ] || return 2
78         echo $$ > "$LOCK_DIR/$1.pid"
79         return 0
80 }
81
82 # Desbloquea el script
83 unlock () {
84         rm -rf "$LOCK_DIR/$1.pid"
85 }
86                         
87
88 # Consulta si un script esta lockeado
89 is_lock () {
90         if [ -e "$LOCK_DIR/$1.pid" ] ; then
91                 # Lock file encontrado!
92                 return 0
93         fi
94         # No hay lock file!
95         return 1
96 }
97
98 # Verifica que un valor este entre otros 2 .... $1 pertecezca  a [$2,$3]
99 # $1 Numero a validar
100 # $2 Cota inferior 
101 # $3 Cota superior
102
103 validar_rango(){
104         if [ "$1" -ge "$2" ] && [ "$1" -le "$3" ]; then
105                 return 0
106         else 
107                 return 1
108         fi
109 }
110
111 # Muestra mensaje y sale con código de error
112 # Uso: die mensaje [código de error = 1]
113 die()
114 {
115         echo "$1" >&2
116         exit ${2:-1}
117 }
118
119 # Imprime mensaje por salida de error
120 # Uso: perr mensajes
121 perr()
122 {
123         echo $@ >&2
124 }
125