Bye Bye Moore

猫マンション建築の野望を胸に零細事業主として資本主義の荒波に漕ぎ出したアラサー男の技術メモ

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