Bash进度条

Zip*_*uda 9 bash progress-bar

我正在使用以下脚本浏览whois中的大型域名列表并找到注册商(对于服务器/ DNS迁移非常有用),并且工作正常.

但是,为了方便起见,我想将进度条纳入其中.这是我的脚本,如果可以改进,请告诉我:

#!/bin/bash
for f in `cat /var/www/vhosts/domainlist`
 do
   if
   domain=$f
   [ "$domain" ] ;
   then
    whois $f | grep -i domainregistrar > /dev/null
     if
     [ $? -le 0 ] ;
     then
      echo $f >> our_registrar
     else
      echo $f >> external_registrar
     fi
   fi
 done
echo "Done, check our_registrar file."
Run Code Online (Sandbox Code Playgroud)

我先试过这个:http://moblog.bradleyit.com/2010/02/simple-bash-progress-bar-function.html

然后这个,但没有运气.

您认为在该脚本中实现进度条的最简单方法是什么?

小智 15

这是一个你可能喜欢的花哨的进度条...

#!/bin/bash
#   Slick Progress Bar
#   Created by: Ian Brown (ijbrown@hotmail.com)
#   Please share with me your modifications
# Functions
PUT(){ echo -en "\033[${1};${2}H";}  
DRAW(){ echo -en "\033%";echo -en "\033(0";}         
WRITE(){ echo -en "\033(B";}  
HIDECURSOR(){ echo -en "\033[?25l";} 
NORM(){ echo -en "\033[?12l\033[?25h";}
function showBar {
        percDone=$(echo 'scale=2;'$1/$2*100 | bc)
        halfDone=$(echo $percDone/2 | bc) #I prefer a half sized bar graph
        barLen=$(echo ${percDone%'.00'})
        halfDone=`expr $halfDone + 6`
        tput bold
        PUT 7 28; printf "%4.4s  " $barLen%     #Print the percentage
        PUT 5 $halfDone;  echo -e "\033[7m \033[0m" #Draw the bar
        tput sgr0
        }
# Start Script
clear
HIDECURSOR
echo -e ""                                           
echo -e ""                                          
DRAW    #magic starts here - must use caps in draw mode                                              
echo -e "          PLEASE WAIT WHILE SCRIPT IS IN PROGRESS"
echo -e "    lqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqk"  
echo -e "    x                                                   x" 
echo -e "    mqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqj"
WRITE             
#
# Insert your script here
for (( i=0; i<=50; i++ ))  
do
    showBar $i 50  #Call bar drawing function "showBar"
    sleep .2
done
# End of your script
# Clean up at end of script
PUT 10 12                                           
echo -e ""                                        
NORM
Run Code Online (Sandbox Code Playgroud)

看起来像这样:

看起来像这样


nsh*_*shy 7

你可以使用pv另一种方式.

 for ... # outer loop
 do
   ...
   echo -n X
 done | pv -s $(wc -l 'your_file_list') - >/dev/null 
Run Code Online (Sandbox Code Playgroud)

所以你用echo X来说当另一部分工作完成并且这是由pv计算的,它知道整个工作规模是由-s选项决定的.


igu*_*tin 0

我建议你使用 Xdialog、Kdialog 或 zenity 以及它的进度选项。