我想倒计数5分钟,每秒更新一次,并在同一行显示结果。 这甚至可以用Bash脚本?
这从Bash shell的作品:
secs=$((5 * 60)) while [ $secs -gt 0 ]; do echo -ne "$secs\033[0K\r" sleep 1 : $((secs--)) done
特殊字符\ 033 [OK]表示清除行的其余部分的行尾,如果前面的输出中有任何字符,并且\ r是将光标移动到行首的回车符。 在stackoverflow.com上有关于此function的一个很好的线程。
你可以在while循环中添加自己的命令或其他任何东西。 如果你需要更具体的东西,请给我更多的细节。
这里有一个正确的输出格式(HH:MM:SS)的正确的前导零和支持小时的改进:
#!/bin/bash m=${1}-1 # add minus 1 Floor () { DIVIDEND=${1} DIVISOR=${2} RESULT=$(( ( ${DIVIDEND} - ( ${DIVIDEND} % ${DIVISOR}) )/${DIVISOR} )) echo ${RESULT} } Timecount(){ s=${1} HOUR=$( Floor ${s} 60/60 ) s=$((${s}-(60*60*${HOUR}))) MIN=$( Floor ${s} 60 ) SEC=$((${s}-60*${MIN})) while [ $HOUR -ge 0 ]; do while [ $MIN -ge 0 ]; do while [ $SEC -ge 0 ]; do printf "%02d:%02d:%02d\033[0K\r" $HOUR $MIN $SEC SEC=$((SEC-1)) sleep 1 done SEC=59 MIN=$((MIN-1)) done MIN=59 HOUR=$((HOUR-1)) done } Timecount $m
给出如下所示的输出:
02:04:15