[Subject Prev][Subject Next][Thread Prev][Thread Next][Subject Index][Thread Index]

[linux-users:96156] [bash]whileループ内変数値の扱いについて教えてください。


永井@Linux初心者です。

bashのwhileループについて教えてください。
cat等のコマンド結果をwhileループに渡して処理した場合、whileループ中
でカウントアップされたシェル変数値が、ループを抜けた後にうまく反映さ
れません。

テスト用に、w_test_sh を作成し、実行した結果が、result.txtです。
w_test_sh中の最初のブロックでは、while loopを回しています。
ループの中でcnt変数をインクリメントして、ループを抜けた後にcnt変数を
表示させるとちゃんと"5"になっています。

次のブロックでは、catコマンド結果をwhileループに渡しています。
ループ中のcnt表示は、問題なくインクリメントされているのですが、
ループを抜けた後のcnt表示が、ループに入る前の値"0"に戻ってしまって
います。こちらのループを抜けた後にcnt値として"22"を保持するためには
どの様にすればよいのでしょうか?


<w_test_sh>
	#!/bin/sh
	#study b-shell
	#Test While Loop

	#block1
	cnt=0
	while [ $cnt -lt 5 ]
	do
	  echo "cnt(in loop) = $cnt"
	  cnt=`expr $cnt + 1`
	done
	echo "cnt(after loop) = $cnt"
	echo " "

	#block2
	cnt=0
	cat $0 | while read LINE
	do
	  echo "$cnt: $LINE"
	  cnt=`expr $cnt + 1`
	done
	echo "cnt(after LOOP) = $cnt"


<result.txt>
	cnt(in loop) = 0
	cnt(in loop) = 1
	cnt(in loop) = 2
	cnt(in loop) = 3
	cnt(in loop) = 4
	cnt(after loop) = 5
	 
	0: #!/bin/sh
	1: #study b-shell
	2: #Test While Loop
	3: 
	4: #block1
	5: cnt=0
	6: while [ $cnt -lt 5 ]
	7: do
	8: echo "cnt(in loop) = $cnt"
	9: cnt=`expr $cnt + 1`
	10: done
	11: echo "cnt(after loop) = $cnt"
	12: echo " "
	13: 
	14: #block2
	15: cnt=0
	16: cat $0 | while read LINE
	17: do
	18: echo "$cnt: $LINE"
	19: cnt=`expr $cnt + 1`
	20: done
	21: echo "cnt(after LOOP) = $cnt"
	22: 
	cnt(after LOOP) = 0


--
office:nagai _at_ cp.star-micronics.co.jp
e-mail:kenichi.nagai _at_ nifty.ne.jp

この情報があなたの探していたものかどうか選択してください。
yes/まさにこれだ!   no/違うなぁ   part/一部見つかった   try/これで試してみる

あなたが探していた情報はどのようなことか、ご自由に記入下さい。特に「まさにこれだ!」と言う場合は記入をお願いします。
例:「複数のマシンからCATV経由でipmasqueradeを利用してWebを参照したい場合の設定について」
Follow-Ups: