Shell 脚本,如果失败则停止 运行

Shell script, stop running if failed

我有一个 shell 重复运行测试的脚本:

#!/bin/tcsh                                                                                                   
set x = 1                                                                                                     
while ($x <= 10000)                                                                                           
    echo $x                                                                                                   
    ./test                                                                  
    @ x += 1                                                                                                  
end 

我正在尝试调整它以打破循环并在测试失败时停止 运行,即测试可执行文件 return 处于非零状态。我认为以下更改会起作用。

#!/bin/tcsh                                                                                                   
set x = 1 
set y = 0                                                                                                    
while ($x <= 10000 && $y == 0)                                                                                           
  echo $x                                                                                                   
  @ y = ./test                                                                  
  @ x += 1                                                                                                  
end 

但是,我收到错误 @: Expression syntax

你能告诉我我做错了什么吗,以及如何在变量中捕获 ./test 的 return 值,以便我可以打破循环,或者其他一些方法来打破循环遇到测试失败时循环

我不喜欢在 csh 中编写脚本,我强烈反对它。但是,在这种情况下,csh 似乎做对了,您可以简单地做:

#!/bin/tcsh                                                                                                   
set x = 1                                                                                                     
while ($x <= 10000)                                                                                           
    echo $x                                                                                                   
    ./test || break                                                             
    @ x += 1                                                                                                  
end