如何在 csh shell 命令提示符中使用 while 循环?

如何在 csh shell 命令提示符中使用 while 循环?

我尝试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, orkshlet/((...))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,除非您的工作需要您 grokcshtcsh脚本(在这种情况下,您可以使用shshell,例如bash,作为交互式 shell,无论您使用什么类型的脚本) 。

答案3

尝试这个,

csh shell,man while页面

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

相关内容