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脚本换行问题实战记录

    shell脚本换行问题实战记录

    换行相信大家都不陌生,下面这篇文章主要给大家介绍了关于shell脚本换行问题的相关资料,文中通过实例代码介绍的非常详细,需要的朋友可以参考下
    2023-02-02
  • shell脚本字符串处理的使用(分割、截取和拼接)

    shell脚本字符串处理的使用(分割、截取和拼接)

    本文主要介绍了shell脚本字符串处理的使用,文中通过示例代码介绍的非常详细,对大家的学习或者工作具有一定的参考学习价值,需要的朋友们下面随着小编来一起学习学习吧
    2023-03-03
  • Shell脚本echo指令使用小技巧

    Shell脚本echo指令使用小技巧

    这篇文章主要介绍了Shell脚本echo指令使用小技巧,包括使用echo指令输出换行、输出不换行、输出变量等技巧,需要的朋友可以参考下
    2014-07-07
  • Shell踢人的三种方法

    Shell踢人的三种方法

    这篇文章主要介绍了Shell踢人的三种方法,首先用w查看当前登录用户,运行w命令的是当前用户,需要保留,其他一概踢掉,需要的朋友可以参考下
    2014-12-12
  • Shell脚本中非交互式修改密码的两种方法

    Shell脚本中非交互式修改密码的两种方法

    这篇文章主要介绍了Shell脚本中非交互式修改密码的两种方法,本文讲解了使用chpasswd和使用passwd和--stdin组合两种方法,需要的朋友可以参考下
    2015-02-02
  • linux shell查看当前外网IP

    linux shell查看当前外网IP

    这篇文章主要介绍了如何在LINUX操作系统下查看本地IP地址(在SHELL下)的相关资料,需要的朋友可以参考下
    2015-09-09
  • Shell实用技巧:快速去除字符串中的空格

    Shell实用技巧:快速去除字符串中的空格

    这篇文章主要介绍了Shell实用技巧:快速去除字符串中的空格,本文给出了3种方法,分别讲解了删除行首空格、删除行末空格、删除所有空格等内容,需要的朋友可以参考下
    2014-11-11
  • Linux下is not in the sudoers file的解决方案

    Linux下is not in the sudoers file的解决

    当我们使用sudo命令切换用户的时候可能会遇到提示以下错误:用户名 is not in the sudoers file.本文给大家分享原因分析及解决方案,感兴趣的朋友跟随小编一起看看吧
    2023-02-02
  • 一个简单的linux命令 cp

    一个简单的linux命令 cp

    这篇文章主要介绍了一个简单的linux命令cp,cp命令用来复制文件或者目录,具有一定的参考价值,感兴趣的小伙伴们可以参考一下
    2016-12-12
  • Linux实现文件定期本地备份/异地备份/删除备份的脚本

    Linux实现文件定期本地备份/异地备份/删除备份的脚本

    数据备份的意义就在于,当受到网络攻击、入侵、电源故障或者操作失误等事故的发生后,可以完整、快速、简捷、可靠地恢复原有系统。本文为大家准备了文件定期本地备份/异地备份/删除备份的脚本,希望对你们有所帮助
    2022-10-10

最新评论