23
22

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?

More than 5 years have passed since last update.

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

Posted at

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

ソース

#!/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、というところでしょうか。

23
22
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
23
22

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?