Я хочу печатать эхом следующее «все еще в процессе, подождите еще 10 минут» каждые 10 минут
Посоветуйте, пожалуйста, какое условие нужно добавить перед командой echo, чтобы выводить эту строку каждые 10 минут?
Замечание - увеличение счетчика на единицу каждый цикл (1 секунда), я не хочу добавлять в этот скрипт дополнительную задержку (команду сна) !!!!!
Until [ ]
do
Counter=1
sleep 1
let counter=$counter+1
[ .... ] && echo " still in process wait another 10 min …."
done
Используйте оператор по модулю (синтаксис, специфичный для bash):
if [ $(($counter % 600)) -eq 0 ] ; then
echo " still in process wait another 10 min .."
fi
Или более портативный:
if [ `expr $counter % 600` -eq 0 ] ; then
echo " still in process wait another 10 min .."
fi
Вам нужно что-то вроде этого:
#10 minutes from now
Increment_Timestamp=$(( $(date +%s) + 600 ))
while [ ... ]
do
...
...
# When now is 10 minutes ago, show the message.
if [ $(date +%s) -lt "${Increment_Timestamp}" ]
then
${Increment_Timestamp}=$(( $(date +%s) + 600 ))
echo "Message"
fi
done
Добавьте еще один счетчик, и если он достигнет 600, вызовите эхо и сбросьте счетчик. При необходимости повторите.
Так должно получиться что-то вроде этого:
let echocounter=$echocounter+1
if [ $echocounter == 600 ]; then echo "still in process wait 10 min ..."; $echocounter=0; fi
Я добавил логику для проверки времени:
BOOL=true
MINUTES=$(date +"%M")
MINUTES=$(echo $MINUTES | sed 's/^0*//')
if $BOOL ; then
BOOL=false
if [ $MINUTES -le "49" ];then
MINUTES10=$(($MINUTES+10))
else
MINUTES10=$(($MINUTES+50))
fi
fi
if [ $MINUTES10 -eq $MINUTES ];then
echo "message"
BOOL=true
fi
Вы, вероятно, хотите Sleepenh программа, позволяющая «аккуратно спать». Также есть Сообщение блога о том, как его использовали для решения проблемы, которая не требовала слишком долгого сна