cshシェルコマンドプロンプトでwhileループを使用する方法は?

cshシェルコマンドプロンプトでwhileループを使用する方法は?

RHEL 7.2のシェルコマンドプロンプトでwhileループを試しましたが、csh次のエラーが発生しました。

$ while true
while: Expression Syntax.

bashシェルでも同様です。

答え1

whileループイン構文は、cshBourneのようなシェルの構文とは異なります。それ:

while (arithmetic-expression)
  body
end

cshendインタラクティブな場合は、何らかの理由で認識された行にそれ自体が表示されるはずです。

~のため算術表現コマンドが成功したかどうかをテストするには{ cmd }(必要なスペース)が必要です。{ cmd }算術式は、コマンドが成功した場合(0終了状態で終了)1と評価され、そうでなければ0(コマンドが0以外の終了状態で終了した場合)と評価されます。

だから:

while ({ true })
  body
end

しかし、これはやや愚かなことです。特にこれが無限ループの場合は、次をtrue使用cshすることをお勧めします。

while (1)
  body
end

対照的に、POSIXシェルの構文は次のとおりです。

while cmd; do
  body
done

算術式を条件付きで評価するには、それを評価するコマンド(たとえば、算術拡張と組み合わせたコマンドまたはコマンドexpr)を実行する必要があります。kshlet((...))test[$((...))

答え2

set i = 1
while ($i < 5)
   echo "i is $i"
   @ i++
end

または

set i = 1
while (1)
    echo "i is $i"
    @ i++
    if ($i >= 5) break
end

次の出力は次のとおりです。

i is 1
i is 2
i is 3
i is 4

csh今、特にLinuxプラットフォームでは-shellに置き換えられました(sh最初から広く使用されていません)。ほとんどのBSDは、基本的な対話型シェルと互換性のあるシェルcshも提供します。sh

shシェルプログラミングを学んでいる場合は、タスクでgrokとスクリプトがcsh必要な場合を除き、シェルの学習を検討してくださいtcsh(この場合、使用するスクリプトの種類に関係なく、たとえばshシェルを対話型シェルとして使用できます)。bash

答え3

この試み、

csh shellman whileページから

set x 0
while {$x<10} {
     puts "x is $x"
     incr x
}

関連情報