2013/01 追記:なぜかcutコマンドでエラーが出るようになっていたので無視するよう修正。
2012/01 追記:再び自分の環境で必要になったので、そう言えば昔プログレスバー作ったなぁと思いググったら意外に需要があるようだ。ついでにソース表示を修正しとこう。
---
CISCOとか、ネットワーク機器のCONSOLEに繋いだ時に表示されるプログレスバー(進捗表示)を Shell で表示してみると便利かな? と思ったので作ってみた。
まずは、 #vi BAR として/home/root99 に下記のshellを作成。
バーの表示はエスケープ・シーケンスを使うことにする。
ちなみに、 CLS="^[[2J" と定義した場合 shell中での CLS 実行は、 Clear コマンドと同義である。
#!/bin/sh#ESC='^[' # ^[ は Ctrl+vの後 Esc を押すことで入力 ESC="\033" ######################### # MAIN ######################### if [ $# -eq 0 ] then echo "Error: not arg" echo "$0 <LINE> <%> <Return Row> <Return Column>" #echo "example: $0 20 10 30 1" echo "example: $0 20 10 999 1" exit 1 fi LINE=$1 PERC=$2 RETL=$3 RETC=$4 chrV="####################################################################################################" chrS="____________________________________________________________________________________________________" printf "${ESC}[${LINE};1H[" chrBAR=`echo "$chrV" | cut -c1-${PERC} 2>/dev/null` if [ $PERC -ge 100 ];then CNT=0 else ((CNT = 100 - ${PERC})) fi chrSPC=`echo "$chrS" | cut -c1-${CNT} 2>/dev/null` if [ $CNT -ne 100 ] ;then printf "$chrBAR" fi if [ $CNT -ne 0 ] ;then printf "$chrSPC" fi printf "] [ ${PERC}%%]" printf "${ESC}[${RETL};${RETC}H" #EOF
#chmod 755 ./BAR
で実行権限をつける。
./BAR プログラムの実行サンプル。
#!/bin/sh
CNT=0
while [ $CNT -le 100 ]
do
/home/root99/BAR 29 ${CNT} 999 1
#echo $CNT
((CNT = $CNT + 1))
done
#EOF
サンプルを実行するとこんな風にぴゅーーっと進捗バーが進行。
[root99@/home/root99/]#./BAR_sample.sh
[################# ] [ 43%]
バックアップ取得などで、大体のサイズが予めわかっている場合は
CNT=`echo "scale=2;(${NOW} / ${MAX})* 100" | bc | sed "s/\\..*//"`
として、$CNT の値を %の引数とすれば良い。
個人的(どっかからぱくってきた)なmemo:
ESC[2J
画面を全消去し、カーソルをホームポシションに戻す。このコマンドを
実行する前に文字属性で背景色の設定をしておくと、その色でクリアさ
れる。
ESC[p1;p2H
カーソルを p1 行、p2 桁に移動する。
ESC[p1;-m
文字属性を設定します。パラメータは最大 16 個までセミコロンで区切っ
て同時に指定できます。指定できる属性は表 2 を参照して下さい。
ESC[p1@
カーソル位置から右方向に p1 個、空白で埋める。
ESC[p1;p2@
カーソル位置から右方向に p1 個、p2 で指定した文字で埋める。p2 はアス
キーコードを 10 進数で指定する。
ESC[p1;p2;p3@
カーソル位置から p3 で指定された方向に p1 個、p2 で指定した文字で埋め
る。p2 はアスキーコードを 10 進数で指定する。p3 の指定方法は以下の通
りである。
p3 = 0; 右方向。カーソルは最後の文字の次に移動する。
p3 = 1; 下方向。カーソルは最後の文字の次に移動する。
p3 = 2; 右方向。カーソルは移動しない。
p3 = 3; 下方向。カーソルは移動しない。
ESCESC
16 進数 1BH を出力する。
表 2: 設定可能な文字属性
設定値 属性
0 全ての属性をデフォルト値にリセットする。
1 強調文字
5 ブリンク
7 反転
30 文字色を黒に設定
31 文字色を赤に設定
32 文字色を緑に設定
33 文字色を茶に設定
34 文字色を青に設定
35 文字色をマゼンダに設定
36 文字色をシアンに設定
37 文字色を白に設定
40 背景色を黒に設定
41 背景色を赤に設定
42 背景色を緑に設定
43 背景色を茶に設定
44 背景色を青に設定
45 背景色をマゼンダに設定
46 背景色をシアンに設定
47 背景色を白に設定
詳解 シェルスクリプト
0 件のコメント:
コメントを投稿