在意外标记“fi”附近的语法错误

我创build了一个非常简单的脚本(见下文),但无法正常运行。 我总是收到消息说

line 5: syntax error near unexpected token 'fi' line 5: 'fi' 

当我尝试执行这个脚本。

 #!/bin/sh rm /opt/file_name if $? -ne 0 then echo 'error' fi exit 

我在Red Hat Linux上运行,如果这有什么区别的话。

如果有人可以帮助确定if语句有什么问题,我会非常感激。

法案

你错过了一个分号(我不确定它是否工作没有方括号)。

备择scheme:

如果[[$? -ne 0]];然后

要么

如果! testing$? = 0; 然后

要么

如果[$? -ne 0];然后

要么

testing$? = 0 || 回声'错误';

甚至更好:

rm / bla / bla || 回声'错误';

(最后一个是你的整个脚本)

这是一个非常方便的select。 “testing”命令本身就是一个类似“rm”的命令。 它将返回代码发送到“if”:如果成功则返回0,如果失败则返回1或更大。 因此,而不是检查特殊的$返回代码? variables,你可以这样做:

 if rm foo; then echo "It worked" else echo "It failed" fi 

你也可以通过这样做否定:

 if ! rm foo; then echo "It failed" fi 

在if语句末尾需要分号以及括号:

 #!/bin/sh rm /opt/file_name if [ $? -ne 0 ]; then echo 'error' fi exit 

你需要一个分号或ifthen之间的换行符,即

 if $? -ne 0; then ... fi 

要么

 if $? -ne 0 then ... fi 
 #!/bin/sh rm somefile if [ $? -ne 0 ] then echo 'error' fi exit