我想在bash操作期间以特定格式显示进度条,类似于以下内容:
[###########](40%)
Run Code Online (Sandbox Code Playgroud)
更新后应该成为
[###############](50%)
Run Code Online (Sandbox Code Playgroud)
然后类似地达到 100%
有没有办法实现这一目标
我写了下面的bash程序,但我不知道如何在同一行显示这个百分比:
#!/bin/bash
{
echo -n "["
for ((i = 0 ; i <= 100 ; i+=6)); do
sleep 0.05
echo -n "###"
done
echo -n "]"
echo
}
Run Code Online (Sandbox Code Playgroud)
假设在循环中执行了一定数量的操作,并且在每个操作完成之后,我想报告一些进展.我不想安装pv或没有默认Ubuntu 12.04安装的任何其他实用程序.
让我们echo -n '...' $'\r'用来打印一个回车:
for ((k = 0; k <= 10 ; k++))
do
echo -n "[ "
for ((i = 0 ; i <= k; i++)); do echo -n "###"; done
for ((j = i ; j <= 10 ; j++)); do echo -n " "; done
v=$((k * 10))
echo -n " ] "
echo -n "$v %" $'\r'
sleep 0.05
done
echo
Run Code Online (Sandbox Code Playgroud)
它使光标移动到行的开头以保持打印.
输出如下,始终在同一行:
[ ################## ] 50 %
.../...
[ ################################# ] 100 %
Run Code Online (Sandbox Code Playgroud)
使用printf:
for((i=0;i<=100;i+=6)); do
printf "%-*s" $((i+1)) '[' | tr ' ' '#'
printf "%*s%3d%%\r" $((101-i)) "]" "$i"
sleep 0.1
done; echo
Run Code Online (Sandbox Code Playgroud)
输出:(在同一行中..在此处打印在不同行上以进行演示。)
[ ] 0%
[###### ] 6%
[############ ] 12%
[################## ] 18%
[######################## ] 24%
[############################## ] 30%
[#################################### ] 36%
[########################################## ] 42%
[################################################ ] 48%
[###################################################### ] 54%
[############################################################ ] 60%
[################################################################## ] 66%
[######################################################################## ] 72%
[############################################################################## ] 78%
[#################################################################################### ] 84%
[########################################################################################## ] 90%
[################################################################################################ ] 96%
Run Code Online (Sandbox Code Playgroud)
您可以将pv其用作进度条:
{
for ((i = 0 ; i <= 100 ; i+=6)); do
sleep 0.5
echo "B"
done | pv -c -s 34 > /dev/null
}
Run Code Online (Sandbox Code Playgroud)