这篇文章主要介绍“怎么使用Shell脚本实现进度条”,在日常操作中,相信很多人在怎么使用Shell脚本实现进度条问题上存在疑惑,小编查阅了各式资料,整理出简单好用的操作方法,希望对大家解答”怎么使用Shell脚本实现进度条”的疑惑有所帮助!接下来,请跟着小编一起来学习吧!
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换行。
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脚本实现进度条”的学习就结束了,希望能够解决大家的疑惑。理论与实践的搭配能更好的帮助大家学习,快去试试吧!若想继续学习更多相关知识,请继续关注编程之家网站,小编会继续努力为大家带来更多实用的文章!
版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。