永井@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
Follow-Ups:
- [linux-users:96157] Re: [bash]whileループ内変数値の扱いについて教えてください。SEKINE Tatsuo
- [linux-users:96158] Re: [bash]whileループ内変数値の扱いについて教えてください。OOSATO,Kazzrou
- [linux-users:96159] Re: [bash]whileループ内変数値の扱いについて教えてください。Takashi SHIRAI
- Prev by Subject: [linux-users:96154] Re: イントラネットの接続に不具合
- Next by Subject: [linux-users:96157] Re: [bash]whileループ内変数値の扱いについて教えてください。
- Previous by thread: [linux-users:96152] やっと理解できました!([linux-users:96141] cronについて)
- Next by thread: [linux-users:96157] Re: [bash]whileループ内変数値の扱いについて教えてください。
- Indexes:[Main][Thread]