2014-09-27 52 views
1

我有以下命令我在腳本作爲一個倒數計時器使用,它的偉大工程改變bash腳本倒計時延時步驟

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

Output:30.29.28.27.26 etc.... 

但是我想能夠輸出在5秒的時間間隔 像

: 30.25.20.15 etc.. 

我該如何更改腳本來做到這一點?

回答

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

我會馬上upvoted,但我花了30秒,以測試你的代碼:) – 2014-09-27 10:14:11

+3

@湯姆·芬內克: )這讓我想起了這個:我如何計算明天的日期?睡眠$((60 * 60 * 24));日期' – Cyrus 2014-09-27 10:19:26

+2

:)這讓我想起了[sleepsort](http://stackoverflow.com/questions/6474318/what-is-the-time-complexity-of-the-sleep-sort)。 – 2014-09-27 17:50:58

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

只是一個建議:你的情況可能是'if((i%5 == 0))' – 2014-09-27 12:23:04

+0

ok。當兩種方式都起作用時,我們可以採取其中一種,對嗎 – 2014-09-27 16:40:52

+1

當然,儘管在bash中使用'['和'$(())'似乎是多餘的。如果你打算使用''',你應該把'=='改成'='(或者更好,'-eq'),因爲其他POSIX shell不能理解==。如果你這樣做了,你的版本會比我的建議更具可移植性,這是特定於bash的建議。 – 2014-09-27 16:50:00

0

這裏是短跑簡單的腳本兼容和Bash:

i=30 && while [ $i -gt 0 ]; do sleep 5; i=$(($i-5)); printf "$i."; done