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

时间:2018-04-09 15:00:55

标签: linux shell csh tcsh

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

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

我正在尝试调整它以打破循环并在测试失败时停止运行,即测试可执行文件以非零状态返回。我认为以下改变是有效的。

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

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

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

1 个答案:

答案 0 :(得分:2)

我不喜欢csh中的脚本,我强烈建议反对它。但是,在这种情况下,csh似乎做了正确的事情,你可以简单地做:

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