Shell脚本实现进度条的两种方式

2023-12-05 0 448

1、脚本中各模块(或函数)运行过程可以量化,则可以直接使用带百分比的进度条。

#!/bin/bash

mark=\’\’
for ((ratio=0;${ratio}<=100;ratio+=5))
do
sleep 0.2
printf \”progress:[%-40s]%d%%\\r\” \”${mark}\” \”${ratio}\”
mark=\”##${mark}\”
done
echo

如下图,进度条中’#'的数量和进度条长度成正比,printf打印每次只回车不换行,新的异常打印会覆盖之前的打印,执行完成后使用echo换行。

Shell脚本实现进度条的两种方式

2、有些情况下你也许不知道程序什么时候结束,只是需要一个动态的进度条来表示程序正在运行,比如进度条由[———-]变成[>———],进度条里面的-不断被>替换,当所有的-都被替换后所有符号又重新变成-,直到程序结束运行。

#!/bin/bash

trap \’onCtrlC\’ INT
function onCtrlC () {
#捕获CTRL+C,当脚本被ctrl+c的形式终止时同时终止程序的后台进程
kill -9 ${do_sth_pid} ${progress_pid}
echo
echo \’Ctrl+C is captured\’
exit 1
}

do_sth() {
#运行的主程序
sleep 10
}

progress() {
#进度条程序
local main_pid=$1
local length=20
local ratio=1
while [ \”$(ps -p ${main_pid} | wc -l)\” -ne \”1\” ] ; do
mark=\’>\’
progress_bar=
for i in $(seq 1 \”${length}\”); do
if [ \”$i\” -gt \”${ratio}\” ] ; then
mark=\’-\’
fi
progress_bar=\”${progress_bar}${mark}\”
done
printf \”Progress: ${progress_bar}\\r\”
ratio=$((ratio+1))
#ratio=`expr ${ratio} + 1`
if [ \”${ratio}\” -gt \”${length}\” ] ; then
ratio=1
fi
sleep 0.1
done
}

do_sth &
do_sth_pid=$(jobs -p | tail -1)

progress \”${do_sth_pid}\” &
progress_pid=$(jobs -p | tail -1)

wait \”${do_sth_pid}\”
printf \”Progress: done \\n\”

下图是程序运行的几个状态

Shell脚本实现进度条的两种方式

到此这篇关于Shell脚本实现进度条的两种方式的文章就介绍到这了,更多相关Shell 进度条内容请搜索悠久资源网以前的文章或继续浏览下面的相关文章希望大家以后多多支持悠久资源网!

您可能感兴趣的文章:

  • shell 进度条实现代码
  • linux shell进度条实现方法
  • shell脚本实现多彩进度条
  • shell进度条追踪指令执行时间的场景分析
  • shell编写一个带有进度条的程序安装脚本

收藏 (0) 打赏

感谢您的支持,我会继续努力的!

打开微信/支付宝扫一扫,即可进行扫码打赏哦,分享从这里开始,精彩与您同在
点赞 (0)

悠久资源 linux shell Shell脚本实现进度条的两种方式 https://www.u-9.cn/jiaoben/linuxshell/101196.html

常见问题

相关文章

发表评论
暂无评论
官方客服团队

为您解决烦忧 - 24小时在线 专业服务