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
标签:输出,shell,进度条,50,step,steps,linux,100 From: https://www.cnblogs.com/liujiaxin2018/p/18036602