Bye Bye Moore

PoCソルジャーな零細事業主が作業メモを残すブログ

bashでプログレスバーを実装してみる その2:プログレスバーの文字列を変数代入でやる

shuzo-kino.hateblo.jp
の派生です。

実際のところ

以前はプログレスバーの文字列はyesコマンドを中心としたパイプ処理にて行いました。
今回は、より泥臭く変数代入でやってみます。

#!/bin/sh

for i in `seq 20 20 100`
do
  COUNT=$i
  STR="${STR}##"
  printf "%-10s(%3d%%)\r" $STR $COUNT
  sleep 1
done

printf "%20s\r"
printf "Finish!!\r"
sleep 1

これを以前の記事と同様yesコマンドやsedをつかった実装にすると、こんな感じ

#!/bin/sh

function bar ()
{
  printf "%-10s(%3s%%)\r" $1 $2
}

for i in `seq 20 20 100`
do
  COUNT=$i
  VAR=`expr $i / 10`
  STR=`yes "#" | head -$VAR | tr -d "\r\n"`
  bar $STR $COUNT
  sleep 1
done

printf "%20s\r"
printf "Finish!!\r"
sleep 1

性能比較

速度を比較すると……やる事が複雑化しているのでyes版のほうが少し遅くなります。
メンテナンス性

 $ time hoge_directtype.sh 
Finish!!            
real	0m6.161s
user	0m0.070s
sys	0m0.098s

$ time hoge_yestype.sh 
Finish!!            
real	0m6.081s
user	0m0.015s
sys	0m0.032s

参考もと

shuzo-kino.hateblo.jp