2012-02-07 18 views
2

少なくとも1回は実行したいKornShell(ksh)スクリプトにループがありますが、私はそれをうまくやりたいのですが、whileループを書く方法についてはたくさん見つかっていますが、何のためにもないと思われる... whileループ。KornShell(ksh)にはDo ... Whileループがありますか?

私がやっていることは、コンマで区切られたファイルのリストを構成ファイルから読み込んで処理することです。ファイルのリストが空の場合は、ディレクトリ内のすべてのファイルを処理したい。

これを行うにはどうすればよいですか?

編集:これは私が現在持っているものです。私はファイル名をつかんで、次のパスのために文字列から削除します。ファイルのリストが空の場合、私はループを終了します。しかし、リストが空で始まっていれば、それはまだ一度実行したいです。

while [[ -n "${FILES%%,*}" ]]; do 
     FILE="${FILES%%,*}"        
     FILES="${FILES#*,}" 
    done 
+0

Googleを最初に試してみましたか? http://www.cyberciti.biz/faq/ksh-for-loop/ –

+0

申し訳ありませんが、kshでは 'do ... while'はありません。これまでのコードで最良のパスを含めるように質問を編集することを検討してください。作業しているものがわかると、助けがはるかに簡単になります。がんばろう。 – shellter

+0

@shelter、普通のwhile ... do ...ループはこれを箱から出すことができます。他の場所で私の答えを見てください。 –

答えて

4

あなたはそれ偽物でした:

do_once=true 
while $do_once || [[ other condition ]]; do 
    : your stuff here 

    do_once=false 
done 
1

kshにそのような構成はありません。これは、while true; do ... ; doneループの最後にbreak(またはcontinue)でエミュレートできます。

+0

パーフェクト、私は恥ずかしいです、私はそれを考えていませんでした。 – Steve

+1

しかし、構成が存在します。 'while block1;調子;ブロック2を行う。完了しました。 'block1'は常に実行されるコードです。 'break'や' continue'の必要はありません。 –

8

はい、kshにおける標準whileループは箱から出して、これをサポートしています。

while ...; do ...; done 

標準whileループは、コードブロック前を持っていますdo以降。

各ブロックには複数のコマンドが含まれている場合があります。従来は、最初のブロックに対して単一のコマンドである のみを使用し、終了ステータスはループが終了するか継続するかを決定します。

複数のコマンドを使用する場合、最後のコマンドのステータスは になります。

while 
    echo do this always # replace with your code 
    [[ -n "${FILES%%,*}" ]] 
do 
    FILE="${FILES%%,*}"        
    FILES="${FILES#*,}" 
done 
+1

もっと一般的に言えば、whileループボディ。調子;行う :;完了 –