-#/bin/sh
+#/bin/bash
+
+## Los scrips que incluyan deben definir BASE_DIR antes de incluirme!
+#BASE_DIR="$PWD"
+
+LOCK_DIR="$BASE_DIR/lock"
# Lee del teclado un valor
#
# $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/\-/\\\-/")
+
IS_OK=`echo "$OPCIONES" | grep "$RTA"`
if [ ! -z "$IS_OK" ] && [ ! -z "$RTA" ] ; then
eval "$3=$RTA"
}
# 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 "lero lero" > "$INST_DIR/lock/$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 "$INST_DIR/lock/$1.pid"
+ rm -rf "$LOCK_DIR/$1.pid"
}
# Consulta si un script esta lockeado
+# Uso: is_lock programa
is_lock () {
- if [ -e "$INST_DIR/lock/$1.pid" ] ; then
+ if [ -e "$LOCK_DIR/$1.pid" ] ; then
# Lock file encontrado!
return 0
fi
# No hay lock file!
return 1
}
-
-#leer "Ingrese un directorio" "/tmp" ALGO
-#echo "Ingresaste : $ALGO"
+# Obtiene el pid de un programa lockeado
+# Uso: lock_pid programa
+lock_pid()
+{
+ is_lock "$1" && cat "$LOCK_DIR/$1.pid"
+}
-# Test de preguntanto
-#preguntar "Sos hombre (s/n)" "sn" OPT
+# Verifica que un valor este entre otros 2 .... $1 pertecezca a [$2,$3]
+# $1 Numero a validar
+# $2 Cota inferior
+# $3 Cota superior
+
+validar_rango(){
+ if [ "$1" -ge "$2" ] && [ "$1" -le "$3" ]; then
+ return 0
+ else
+ return 1
+ fi
+}
+
+# Muestra mensaje y sale con código de error
+# Uso: die mensaje [código de error = 1]
+die()
+{
+ echo "$1" >&2
+ exit ${2:-1}
+}
+
+# Imprime mensaje por salida de error
+# Uso: perr mensajes
+perr()
+{
+ echo $@ >&2
+}
-#if [ "$OPT" == "s" ] ; then
-# echo "Sos un mentiroso!!!"
-#else
-# echo "Jaja ... Trola!"
-#fi
-# Test de preguntanto
-#preguntar "Que preferis (drogas/cafe/vino/coca cola)" "drogas cafe vino \"coca cola\"" OPT
+# 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
+
+ clean_log "$1" "$4"
+}
+
+# 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"