我尝试csh
在 RHEL 7.2 的 shell 命令提示符中使用 while 循环,但收到以下错误:
$ while true
while: Expression Syntax.
bash
在shell中也是如此。
答案1
while
循环 in的语法csh
与类 Bourne shell 的语法不同。它是:
while (arithmetic-expression)
body
end
csh
当交互时,由于某种原因,它必须end
单独出现在一行上。
为了算术表达式要测试命令是否成功,您需要{ cmd }
(需要空格)。{ cmd }
如果命令成功(以 0 退出状态退出),则算术表达式中的 解析为 1,否则解析为 0(如果命令以非零退出状态退出)。
所以:
while ({ true })
body
end
但这有点愚蠢,特别是考虑到这true
不是csh
.对于无限循环,您宁愿使用:
while (1)
body
end
相比之下,在 POSIX shell 中,语法为:
while cmd; do
body
done
如果您希望条件计算算术表达式,则需要运行一个计算它们的命令,例如expr
, orksh
的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
现在很大程度上被 -shell 所取代,特别是在 Linux 平台上(从一开始,neversh
的使用就非常广泛)。csh
大多数 BSD 还提供sh
兼容 shell 作为默认的交互式 shell。
如果您正在学习 shell 编程,请考虑学习 shell sh
,除非您的工作需要您 grokcsh
和tcsh
脚本(在这种情况下,您可以使用sh
shell,例如bash
,作为交互式 shell,无论您使用什么类型的脚本) 。
答案3
尝试这个,
从csh shell
,man while
页面
set x 0
while {$x<10} {
puts "x is $x"
incr x
}