]> git.llucax.com Git - z.facultad/75.08/llamadas.git/blobdiff - inst/util.sh
Agrego material pulenta para el final.
[z.facultad/75.08/llamadas.git] / inst / util.sh
index 136ab7ce3208fc6c33f51111c196d585fda8b18c..2465e9893f9b66fb9c2c55cb08942afb11601937 100755 (executable)
@@ -1,4 +1,4 @@
-#/bin/sh
+#/bin/bash
 
 ## Los scrips que incluyan deben definir BASE_DIR antes de incluirme!
 #BASE_DIR="$PWD"
@@ -31,13 +31,22 @@ leer () {
 #  $1 = Leyeda a mostrar de preguntar
 #  $2 = string con las opciones validas
 #  $3 = Variable donde guardar el valor ingresado
+#  $4 = Valor por defecto si se apreta ENTER
 #
 preguntar () {
-       PREGUNTA=$1
-       OPCIONES=$2
-       while [ true ] ; do
+       PREGUNTA="$1"
+       OPCIONES="$2"
+       DEFAULT="$4"
+       while true; do
                read -p "$PREGUNTA [$OPCIONES]: " RTA
 
+               # Si me pasaron un default y la respuesta es vacía
+               if [ -n "$DEFAULT" -a -z "$RTA" ]; then
+                       # devuelvo default
+                       RTA="$DEFAULT"
+                       return 0
+               fi
+
                # Escapeo el caracter '-' por '\-'
                RTA=$(echo $RTA | sed "s/\-/\\\-/")
 
@@ -60,22 +69,26 @@ validar_solo_numeros () {
 }
 
 # Crea un archivo de lock para un script
+# Devuelve: 0 si ok, 1 si ya esta lockeado, 2 si no pudo crear lock.
+# Uso: lock programa
 lock () {
-       if is_lock "$1" ; then
-               # Ya esta loqueado, no lo vuelvo a crear
-               echo "No"
-               return
-       fi
-       echo "$$" > "$LOCK_DIR/$1.pid"
+       # si ya esta loqueado, no lo vuelvo a crear
+       is_lock "$1" && return 1
+       # Si no puedo escribir en el dir de lock, da error
+       [ -w "$LOCK_DIR" ] || return 2
+       echo $$ > "$LOCK_DIR/$1.pid"
+       return 0
 }
 
 # Desbloquea el script
+# Uso: unlock programa
 unlock () {
        rm -rf "$LOCK_DIR/$1.pid"
 }
                        
 
 # Consulta si un script esta lockeado
+# Uso: is_lock programa
 is_lock () {
        if [ -e "$LOCK_DIR/$1.pid" ] ; then
                # Lock file encontrado!
@@ -85,6 +98,13 @@ is_lock () {
        return 1
 }
 
+# Obtiene el pid de un programa lockeado
+# Uso: lock_pid programa
+lock_pid()
+{
+       is_lock "$1" && cat "$LOCK_DIR/$1.pid"
+}
+
 # Verifica que un valor este entre otros 2 .... $1 pertecezca  a [$2,$3]
 # $1 Numero a validar
 # $2 Cota inferior 
@@ -97,21 +117,50 @@ validar_rango(){
                return 1
        fi
 }
-               
-#leer "Ingrese un directorio" "/tmp" ALGO
 
-#echo "Ingresaste : $ALGO"
+# Muestra mensaje y sale con código de error
+# Uso: die mensaje [código de error = 1]
+die()
+{
+       echo "$1" >&2
+       exit ${2:-1}
+}
 
-# Test de preguntanto
-#preguntar "Sos hombre (s/n)" "sn" OPT
+# Imprime mensaje por salida de error
+# Uso: perr mensajes
+perr()
+{
+       echo $@ >&2
+}
+
+
+# Pone un MSG en el log
+# Parametros :
+#  $1 = Archivo del log
+#  $2 = Comando
+#  $3 = Mensaje
+#  $4 = Tamaño maximo
+put_log() {
+       fecha=$(date +%d/%m/%Y-%H:%M)
+       echo "$fecha $USER $2:\"$3\"" >> $1
 
-#if [ "$OPT" == "s" ] ; then
-#      echo "Sos un mentiroso!!!"
-#else
-#      echo "Jaja ... Trola!"
-#fi
+       clean_log "$1" "$4"
+}
 
-# Test de preguntanto
-#preguntar "Que preferis (drogas/cafe/vino/coca cola)" "drogas cafe vino \"coca cola\"" OPT
+# Trunca un archivo de log si pasa el tamaño máximo.
+# Uso: clean_log log_filename max_log_size_bytes
+clean_log()
+{
+       LOGFILE="$1"
+       LOGSIZE="$2"
+       # Archivo temporal
+       tmp=`dirname "$LOGFILE"`"/`basename $0`.$$.temp"
+       # Verifico que el logfile no se pase del tamaño maximo
+       tam=`stat -c '%s' "$LOGFILE"`
+       # Si se paso del maximo dejo las ultimas 100 lineas
+       if [ "$tam" -ge "$LOGSIZE" ]; then
+               tail -n 100 "$LOGFILE" > "$tmp"
+               mv "$tmp" "$LOGFILE"
+       fi
+}
 
-#echo "Vos decidis : $OPT"