linux shell 中实现进度条

 

linux  shell 中实现进度条:

复制代码
#! /bin/bash

total_steps=100

for ((step=1; step<=total_steps; step++)); do
    printf "\r[%-50s] %d%%" $(printf "#%.0s" $(seq 1 $((step*50/total_steps)))) $((step*100/total_steps))
    sleep 0.1 # 模拟操作延迟
done
printf "\n"
复制代码

 

命令解释:

for 中实现类c的循环,表示循环100次;

printf 命令中 有3个重要参数:分别是\r;  %-50s;  %d%%;

\r表示回车;即将光标移动到行首,实现新的输出内容在同一行覆盖旧的输出内容;

%-50s;  表示输出字符串,而且占用长度为50, -表示左对齐;

%d %%; %d表示输出整数; %%表示输出百分号;

 

printf后边的两个变量分别是两个$符号后边的内容:

01、 $(printf "#%.0s" $(seq 1 $((step*50/total_steps))))

#号表示每次输出的字符

%.0s表示输出字符串,但是不输出字符串的任何内容;

$(seq 1 $((step*50/total_steps)): 实际上是根据迭代的次数输出多少行的文件,这样前面的#可以输出多少次;step乘以50,而分母是100,因此迭代2次增加1行;迭代100次,最多输出50行,也就是最多输出50个#; 与printf的%-50s对应;

 

02、 $((step*100/total_steps))

这一步表示完成的循环次数占总的循环次数的比例,实际就是进度条的数值。

 

来源:

01、https://mp.weixin.qq.com/s?__biz=Mzg4ODA5NDEwNw==&mid=2247484496&idx=1&sn=f3839cec5a424369b2acdf9d2f7e9601&chksm=cf8128a4f8f6a1b29fbb9046b822e5202f12f39b274f15654b770ac7134298c4497fee08702c&mpshare=1&scene=23&srcid=0225098tDHqOHPllxMpS81BW&sharer_shareinfo=06fee7b30e0754937d5d3a8c14dc49c5&sharer_shareinfo_first=06fee7b30e0754937d5d3a8c14dc49c5#rd

 

posted @   小鲨鱼2018  阅读(407)  评论(0编辑  收藏  举报
相关博文:
阅读排行:
· 震惊!C++程序真的从main开始吗?99%的程序员都答错了
· 【硬核科普】Trae如何「偷看」你的代码?零基础破解AI编程运行原理
· 单元测试从入门到精通
· 上周热点回顾(3.3-3.9)
· winform 绘制太阳,地球,月球 运作规律
历史上的今天:
2023-02-27 centos7中 /lib/ld-linux.so.2: bad ELF interpreter: No such file or directory
2023-02-27 Error downloading packages: glibc-2.17-326.el7_9.i686: [Errno 5]
2023-02-27 win10 中tassel5安装后字体特别小的解决方法
2023-02-27 centos 7中 出现 bash: pip: command not found...解决方法
2023-02-27 SyntaxError: Non-ASCII character '\xe8' in file test.py on line 6,
2022-02-27 could not find function "get_geo_position"
点击右上角即可分享
微信分享提示