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

pth*_*fan 24 bash

我想倒计时 5 分钟,每秒更新一次并在同一行显示结果。这甚至可以用 Bash 脚本编写吗?

dsm*_*k80 48

这适用于 Bash shell:

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

特殊字符\033[0K表示行尾,如果前一个输出中还有任何字符,它会清除行的其余部分,\r是一个回车,将光标移动到行的开头。stackoverflow.com 上有一个关于此功能的好帖子。

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


rah*_*huL 13

这是一个改进了正确的输出格式 (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
Run Code Online (Sandbox Code Playgroud)

给出如下所示的输出:

02:04:15
Run Code Online (Sandbox Code Playgroud)