在Linux/Unix shell脚本中如何显示倒计时
时间:2019-11-20 08:53:50 来源:igfitidea点击:
bash shell脚本上如何显示倒计时?
解决方案
先清除屏幕,然后通过tput在指定位置显示倒计时
clear tput cup 10 5
shell计算字符串的长度的方法:
l=${#msg}
计算下一列的方法:
l=$(( l+5 ))
最后使用bash for循环显示倒计时:
for i in {30..01} do tput cup 10 $l echo -n "$i" sleep 1 done echo
完整的代码如下
#!/bin/bash zone_id="My-ID" api_key="My_API_KEY" email_id="My_EMAIL_ID" row=2 col=2 urls="$@" countdown() { msg="Purging ..." clear tput cup $row $col echo -n "$msg" l=${#msg} l=$(( l+$col )) for i in {30..1} do tput cup $row $l echo -n "$i" sleep 1 done } # Do it for u in $urls do amp_url="${u}amp/" curl -X DELETE "https://api.cloudflare.com/client/v4/zones/${zone_id}/purge_cache" \ -H "X-Auth-Email: ${email_id}" \ -H "X-Auth-Key: ${api_key}" \ -H "Content-Type: application/json" \ --data "{\"files\":[\"${u}\",\"${amp_url}\"]}" &>/dev/null && countdown "$u" done echo
运行脚本:
./script.sh url1 url2
POSIX Shell版本
使用shell函数:
countdown() ( IFS=: set -- $* secs=$(( ${1#0} * 3600 + ${2#0} * 60 + ${3#0} )) while [ $secs -gt 0 ] do sleep 1 & printf "\r%02d:%02d:%02d" $((secs/3600)) $(( (secs/60)%60)) $((secs%60)) secs=$(( $secs - 1 )) wait done echo )
按如下方式运行:
countdown "00:00:10" countdown "00:00:30" countdown "00:01:42"