Posted at

シェル:プログレスバーの作り方

More than 3 years have passed since last update.

ふとしたときに思い出せないのでメモ。


ソース

#!/bin/bash

C=30
A=0
while [ $A -le $C ]
do
B=""
for i in `seq 1 $C`
do
if [ $A -eq $i ]
then
B="$B>"
else
if [ $i -le $A ]
then
B="$B-"
else
B="$B "
fi
fi
done
P=`expr $A \* 100 / $C`
echo -en " copying... [$B] $P %\r"
sleep 1
A=`expr $A + 1`
done


ちょっと解説

ポイントはechoの部分。

-e オプションでエスケープコードを有効に

-n オプションで改行を抑制

\r でカーソルを行頭に移動して、次の文字列を出力する

と、同じ行でどんどん上書きされていく仕組み。echo -e " copying... [$B] $P %\r\c" と、-nオプションの代わりに\cコードでもいけると思います(たぶん)。

ちなみに、\rでいけるんだったら\nでもいけるんちゃうか、と思ってしまいますが改行されてしまいうまくいきません。\r(CR)と\n(LF)の意味合いの違いにあると思います。詳しくは別途かき・・・たいです。

また、-nオプションつけてても、文字列として改行を記載するとそこは有効になってしまいます。あくまでもechoコマンドとしての改行抑制オプションが-n、というところでしょうか。