RHEL 7.2のシェルコマンドプロンプトでwhileループを試しましたが、csh
次のエラーが発生しました。
$ while true
while: Expression Syntax.
bash
シェルでも同様です。
答え1
while
ループイン構文は、csh
Bourneのようなシェルの構文とは異なります。それ:
while (arithmetic-expression)
body
end
csh
end
インタラクティブな場合は、何らかの理由で認識された行にそれ自体が表示されるはずです。
~のため算術表現コマンドが成功したかどうかをテストするには{ cmd }
(必要なスペース)が必要です。{ cmd }
算術式は、コマンドが成功した場合(0終了状態で終了)1と評価され、そうでなければ0(コマンドが0以外の終了状態で終了した場合)と評価されます。
だから:
while ({ true })
body
end
しかし、これはやや愚かなことです。特にこれが無限ループの場合は、次をtrue
使用csh
することをお勧めします。
while (1)
body
end
対照的に、POSIXシェルの構文は次のとおりです。
while cmd; do
body
done
算術式を条件付きで評価するには、それを評価するコマンド(たとえば、算術拡張と組み合わせたコマンドまたはコマンドexpr
)を実行する必要があります。ksh
let
((...))
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 shell
、man while
ページから
set x 0
while {$x<10} {
puts "x is $x"
incr x
}