2014-09-27 3 views
1

я следующая команда я использовать в сценарии, как таймер обратного отсчета, и он прекрасно работаетИзменение Баш задержки сценарий обратный отсчет 5 сек шаги

# 30 sec Countdown Timer 
for i in {30..1};do echo -n "$i." && sleep 1; done 

Output:30.29.28.27.26 etc.... 

Но я хотел бы иметь возможность выхода в 5SEc интервалы как

: 30.25.20.15 etc.. 

Как я могу изменить сценарий для этого?

ответ

7
for i in {30..1..5};do echo -n "$i." && sleep 5; done 
+1

Я бы upvoted сразу, но мне потребовалось 30 секунд, чтобы проверить свой код :) –

+3

@tom Фенек::) Это напоминает мне об этом: как рассчитать дату завтра? 'sleep $ ((60 * 60 * 24)); date' – Cyrus

+2

:) И это напомнило мне [sleepsort] (http://stackoverflow.com/questions/6474318/what-is-the-time-complexity-of-the-sleep-sort). –

2
for i in {30..1} 
do 
    if [ $((i%5)) == 0 ] 
    then 
    echo -n "$i." 
    fi 
    sleep 1 
done 
+0

Просто предложение: ваше состояние может быть 'if ((i% 5 == 0))' –

+0

ok. Когда оба способа работают, мы можем взять, верно? –

+1

Конечно, хотя в bash кажется излишним использовать '' и '$ (())'. Если вы _are_ собираетесь использовать '[', вы должны изменить '==' на '=' (или еще лучше, '-eq'), так как' == 'не понимается другими оболочками POSIX. Если вы это сделали, ваша версия будет более переносимой, чем мое предложение, которое зависит от bash. –

0

Вот простой скрипт совместим с тире и Bash:

i=30 && while [ $i -gt 0 ]; do sleep 5; i=$(($i-5)); printf "$i."; done 
Смежные вопросы