0 votos

obtener el estado de la última fecha de modificación de un archivo en linux

Estoy tratando de conseguir el estado de si el archivo es modificado o no en Linux. Estoy usando este trozo de código y funciona bien, pero tiene un problema que es la salida después de la primera instrucción "if".

No se ve para elif declaración. Estoy tratando de conseguir "advertencia" si el archivo no se modifica a partir de los últimos 2 minutos, y se debe dar a mí "críticos" si todavía no modificado por 4 minutos. siempre mostrar advertencia o ACEPTAR, pero no toma en cuenta la elif declaración. el código que estoy utilizando

#!/bin/bash
# How to execute ./sensor.sh tem_sensor
HOUR=$(date +%H)
MIN=$(date +%M)

# Directory where they are sensor directorys
DIR=/home/robbin/Desktop/sensor_collection/
# Name of selected sensor
SENSOR=$1
# Name of sensor's directoris
SENSORS=(sensor1)

# Loop in every folder
for i in ${SENSORS[@]}
do
        # We only want the specified sensor so we will skip until we found it
        if [[ $SENSOR != $i ]]; then continue ; fi
        # You take the hour and minute value from last file
        LHOUR=$(ls -lrt $DIR/$i| tail -n1 | awk '{ print $8}' | awk -F ':' '{ print $1}')
        LMIN=$(ls -lrt $DIR/$i | tail -n1 | awk '{ print $8}' | awk -F ':' '{ print $2}')
        # We calculate the diferences
        let FHOUR=$(( HOUR - LHOUR ))
        let FMIN=$(( MIN - LMIN ))

        # if the diference is greater than 2
        if ([ $FMIN -gt 02 ] && [ $FMIN -lt 04 ]); then
            echo "WARNING - More than 2 minutes without recieving data"
            exit 1 # We put warning!
        # Else if it is not more than 2
        # We check if we have an hour of diference!
        elif [[ $FMIN -gt 04 ]]; then
            echo "CRITICAL - More than 4 minutes without recieving data"
            exit 2 # We put Red alert!
        else
            echo "OK - We recieve data"
            exit 0 # Green alert if we dont have problems
        fi
done
echo "UNKNOW - Sensor not found"
exit 3

Si alguien me ayuda a resolver este problema. cox parece que no tiene ningún problema y que debería funcionar como se esperaba. Soy nuevo en scripts de bash. Yo estaría agradecido. .

2voto

Khaled Puntos 21517

Usted puede volver a organizar su if-else de la siguiente manera:

if [[ $FMIN -gt 04 ]]; then
    echo "CRITICAL - More than 4 minutes without recieving data"
    exit 2 # We put Red alert!
elif [[ $FMIN -gt 02 ]]; then
    echo "WARNING - More than 2 minutes without recieving data"
    exit 1 # We put warning!
else
    echo "OK - We recieve data"
    exit 0 # Green alert if we dont have problems
fi

Esto es más sencillo de leer y debe hacer lo que quiera.

1voto

a0l Puntos 1

Usted necesidad de cambiar las condiciones en el si y elif cláusulas. La primera condición se cumple ambos casos, por lo que el segundo es que nunca llegue a verificarse.

EnMiMaquinaFunciona.com

EnMiMaquinaFunciona es una comunidad de administradores de sistemas en la que puedes resolver tus problemas y dudas.
Puedes consultar las preguntas de otros sysadmin, hacer tus propias preguntas o resolver las de los demás.

Powered by: