Bash 脚本倒计时 5 分钟显示在一行上

Bash 脚本倒计时 5 分钟显示在一行上

我想进行 5 分钟的倒计时,每秒更新一次并在同一行显示结果。使用 Bash 脚本可以实现这一点吗?

答案1

这在 Bash shell 中有效:

secs=$((5 * 60))
while [ $secs -gt 0 ]; do
   echo -ne "$secs\033[0K\r"
   sleep 1
   : $((secs--))
done

特殊字符\033[0K表示行尾,如果上一个输出留下任何字符,则清除行的其余部分,并且\r是回车符,可将光标移动到行首。关于此功能的精彩帖子位于stackoverflow.com

您可以在 while 循环中添加自己的命令或其他任何内容。如果您需要更具体的内容,请向我提供更多详细信息。

答案2

以下是正确输出格式 (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

相关内容