2013-08-28 6 views
47

私はテキストを処理するためのBashスクリプトを書いていますが、これはwhileループを必要とするかもしれません。例えばBashでループを壊すには?

、Cでのwhileループ:

int done = 0; 
while(1) { 
    ... 
    if(done) break; 
} 

私はそれと同等のbashスクリプトを書きたいです。しかし、私は通常使用されると私は読んですべての古典的な例が示されているよう何、これは次のとおりです。

while read something; 
do 
... 
done 

それは明確に定義され、広くCで使用され、Iされ、while(1){}break;を行う方法についてのヘルプを提供していますstdinのデータを読み取る必要はありません。

上記のCコードに相当するBashには誰でも助けてくれますか?

答えて

66

bashではそれほど違いはありません。

done=0 
while : ; do 
    ... 
    if [ "$done" -ne 0 ]; then 
     break 
    fi 
done 

:はno-opコマンドです。終了ステータスは常に0であるため、ループはdoneに0以外の値が指定されるまで実行されます。


あなたがループを終了するために、doneの値を設定し、テストすることができ、多くの方法があります。上に示したものはPOSIX互換のシェルで動作するはずです。

25
while true ; do 
    ... 
    if [ something ]; then 
     break 
    fi 
done 
+1

「真」の括弧は必要ありません。 – chepner

+0

@chepnerさん、ありがとうございました。 – lurker

+0

ありがとうございます。あなたの答えは正しいですが、私は1つだけを受け入れることができます。あなたはアップヴォートに値する。 – lulyon

関連する問題