]> git.llucax.com Git - z.facultad/75.08/llamadas.git/blob - inst/util.sh
Agrego material pulenta para el final.
[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 # Uso: lock programa
74 lock () {
75         # si ya esta loqueado, no lo vuelvo a crear
76         is_lock "$1" && return 1
77         # Si no puedo escribir en el dir de lock, da error
78         [ -w "$LOCK_DIR" ] || return 2
79         echo $$ > "$LOCK_DIR/$1.pid"
80         return 0
81 }
82
83 # Desbloquea el script
84 # Uso: unlock programa
85 unlock () {
86         rm -rf "$LOCK_DIR/$1.pid"
87 }
88                         
89
90 # Consulta si un script esta lockeado
91 # Uso: is_lock programa
92 is_lock () {
93         if [ -e "$LOCK_DIR/$1.pid" ] ; then
94                 # Lock file encontrado!
95                 return 0
96         fi
97         # No hay lock file!
98         return 1
99 }
100
101 # Obtiene el pid de un programa lockeado
102 # Uso: lock_pid programa
103 lock_pid()
104 {
105         is_lock "$1" && cat "$LOCK_DIR/$1.pid"
106 }
107
108 # Verifica que un valor este entre otros 2 .... $1 pertecezca  a [$2,$3]
109 # $1 Numero a validar
110 # $2 Cota inferior 
111 # $3 Cota superior
112
113 validar_rango(){
114         if [ "$1" -ge "$2" ] && [ "$1" -le "$3" ]; then
115                 return 0
116         else 
117                 return 1
118         fi
119 }
120
121 # Muestra mensaje y sale con código de error
122 # Uso: die mensaje [código de error = 1]
123 die()
124 {
125         echo "$1" >&2
126         exit ${2:-1}
127 }
128
129 # Imprime mensaje por salida de error
130 # Uso: perr mensajes
131 perr()
132 {
133         echo $@ >&2
134 }
135
136
137 # Pone un MSG en el log
138 # Parametros :
139 #  $1 = Archivo del log
140 #  $2 = Comando
141 #  $3 = Mensaje
142 #  $4 = Tamaño maximo
143 put_log() {
144         fecha=$(date +%d/%m/%Y-%H:%M)
145         echo "$fecha $USER $2:\"$3\"" >> $1
146
147         clean_log "$1" "$4"
148 }
149
150 # Trunca un archivo de log si pasa el tamaño máximo.
151 # Uso: clean_log log_filename max_log_size_bytes
152 clean_log()
153 {
154         LOGFILE="$1"
155         LOGSIZE="$2"
156         # Archivo temporal
157         tmp=`dirname "$LOGFILE"`"/`basename $0`.$$.temp"
158         # Verifico que el logfile no se pase del tamaño maximo
159         tam=`stat -c '%s' "$LOGFILE"`
160         # Si se paso del maximo dejo las ultimas 100 lineas
161         if [ "$tam" -ge "$LOGSIZE" ]; then
162                 tail -n 100 "$LOGFILE" > "$tmp"
163                 mv "$tmp" "$LOGFILE"
164         fi
165 }
166