我想进行 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