Назад | Перейти на главную страницу

bash + строка печати каждые 10 минут в bash

Я хочу печатать эхом следующее «все еще в процессе, подождите еще 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 программа, позволяющая «аккуратно спать». Также есть Сообщение блога о том, как его использовали для решения проблемы, которая не требовала слишком долгого сна