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
【推荐】国内首个AI IDE,深度理解中文开发场景,立即下载体验Trae
【推荐】编程新体验,更懂你的AI,立即体验豆包MarsCode编程助手
【推荐】抖音旗下AI助手豆包,你的智能百科全书,全免费不限次数
【推荐】轻量又高性能的 SSH 工具 IShell:AI 加持,快人一步
· 震惊!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"