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

 更新时间:2023年03月30日 09:25:30   作者:Sudley.su  
本文主要介绍了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脚本实现进度条的两种方式的文章就介绍到这了,更多相关Shell 进度条内容请搜索脚本之家以前的文章或继续浏览下面的相关文章希望大家以后多多支持脚本之家!

相关文章

  • shell脚本加密工具shc使用详解

    shell脚本加密工具shc使用详解

    Linux下的shell脚本用途广泛,经常包含IP、Pwd等关键信息,可读可写的特点很容易造成信息泄露,导致严重后果。基于这些原因,对脚本实施加密便变得很有必要。本文介绍shell脚本加密工具应用场景分析,一起看看吧
    2021-06-06
  • shell递归输出文件名和目录名的方法

    shell递归输出文件名和目录名的方法

    今天小编就为大家分享一篇shell递归输出文件名和目录名的方法,具有很好的参考价值,希望对大家有所帮助。一起跟随小编过来看看吧
    2018-06-06
  • Linux自定义防误删脚本的思路与测试

    Linux自定义防误删脚本的思路与测试

    相信很多朋友都遇到过在linux下误删除文件的时候,此刻的心中仿佛有无数的羊驼在奔腾,下面这篇文章主要给大家介绍了关于Linux自定义防误删脚本的思路与测试的相关资料,需要的朋友可以参考下
    2021-09-09
  • Shell编程条件测试的实现

    Shell编程条件测试的实现

    Shell脚本的条件测试可以用于测试字符串、文件状态和数字。本文就详细的介绍一下Shell编程条件测试,具有一定的参考价值,感兴趣的可以了解一下
    2021-11-11
  • Linux系统上实现定时重启Tomcat服务脚本介绍

    Linux系统上实现定时重启Tomcat服务脚本介绍

    大家好,本篇文章介绍的是Linux系统上实现定时重启Tomcat服务脚本介绍,感兴趣的同学赶紧来看看,希望可以对你起到帮助
    2021-11-11
  • nginx日志切割脚本分享

    nginx日志切割脚本分享

    nginx日志太大怎么办,只有分割一下了,这篇文章就介绍了一下nginx日志切割脚本,需要的朋友可以参考下
    2014-03-03
  • linux shell查看当前外网IP

    linux shell查看当前外网IP

    这篇文章主要介绍了如何在LINUX操作系统下查看本地IP地址(在SHELL下)的相关资料,需要的朋友可以参考下
    2015-09-09
  • shell SNAT与DNAT的使用与区别

    shell SNAT与DNAT的使用与区别

    本文主要介绍了shell SNAT与DNAT的使用与区别,文中通过示例代码介绍的非常详细,对大家的学习或者工作具有一定的参考学习价值,需要的朋友们下面随着小编来一起学习学习吧
    2023-06-06
  • Shell脚本执行的几种方式小结

    Shell脚本执行的几种方式小结

    本文介绍了Shell脚本执行的几种方式小结,主要介绍了5种方法,文中通过示例代码介绍的非常详细,对大家的学习或者工作具有一定的参考学习价值,需要的朋友们下面随着小编来一起学习学习吧
    2023-09-09
  • Shell时间(date)相关命令

    Shell时间(date)相关命令

    这篇文章主要介绍了Shell时间(date)相关命令,需要的朋友可以参考下
    2015-11-11

最新评论