2013-08-08 9 views
11

Ho bisogno di eseguire un comando quando qualcosa viene inserito in BASH con un certo intervallo di tempo, e se è non quella volta esegue un altro comando. Ecco quello che ho finora, ma non sembra funzionare ..

FLATTIME=$(date "+%H%M") 
FLATTIME=${FLATTIME##0} 

if ! [[ $FLATTIME -gt 1130 ]] ; then 
mysql --host=192.168.0.100 --user=myself --password=mypass thedb << EOF 
INSERT INTO $STAFFID values ('','$STAFFID','$THETIME','','$THEDATE','$DAYOFWEEK'); 
EOF 

else 
mysql --host=192.168.1.92 --user=myself --password=mypass thedb << EOF 
UPDATE $STAFFID SET Out_Time='$THETIME' WHERE date='$THEDATE'; 
EOF 
fi 

Idealmente quello che vorrei è avere qualcosa di simile: se il tempo è 8:00-13:00 fare il primo comando, se il tempo è tra 1pm e 11pm fai il secondo comando, altrimenti echo "qualcuno è stato al lavoro troppo a lungo". Ho provato alcune varianti ma senza fortuna, sembra solo che esegua il primo comando qualunque cosa io faccia ..

+1

Questo può essere troppo ovvio, ma hai eseguire questo script in un momento successivo rispetto 1130? O commentato il comando 'date' e un timestamp hard-coded per i test? Ho provato la tua struttura 'if-else' sulla mia macchina e ha funzionato bene. –

risposta

24

In questo caso, devi solo guardare l'ora. Inoltre, bash ha sintassi per specificare la radice di un numero, in modo da non dovete preoccuparvi di 08 e 09 che sono numeri ottali non validi:

H=$(date +%H) 
if ((8 <= 10#$H && 10#$H < 13)); then 
    echo between 8AM and 1PM 
elif ((13 <= 10#$H && 10#$H < 23)); then 
    echo between 1PM and 11PM 
else 
    echo go to bed 
fi 

"10 # $ H" è il contenuto della variabile, della base 10.


realtà, meglio usare %k anziché %H per evitare il problema ottale valido.

H=$(date -d '08:45' "+%H") 
((13 <= H && H < 23)) && echo ok || echo no 
bash: ((: 08: value too great for base (error token is "08") 

contro

H=$(date -d '08:45' "+%k") 
# ....................^^ 
((13 <= H && H < 23)) && echo ok || echo no 
no 
Problemi correlati