我创建了一个非常简单的脚本(见下文),但无法正常运行。我总是收到消息说
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 语句的问题所在,我将不胜感激。
账单
答案1
您缺少一个分号(并且我不确定没有方括号是否能起作用)。
备择方案:
如果 [[ $? -ne 0 ]];则
或者
如果 ! 测试 $? = 0; 那么
或者
如果 [ $? -ne 0 ];则
或者
测试 $? = 0 || echo ‘错误’;
甚至更好:
rm /bla/bla ||回显‘错误’;
(最后一个是你的整个脚本)
答案2
这是一个非常方便的替代方案。“test”命令本身就是一个类似于“rm”的命令。它会向“if”发送返回代码:如果成功则为 0,如果失败则为 1 或更大。因此,您无需检查特殊 $? 变量中的返回代码,只需执行以下操作:
if rm foo; then
echo "It worked"
else
echo "It failed"
fi
您还可以通过执行以下操作来否定 if:
if ! rm foo; then
echo "It failed"
fi
答案3
您需要在 if 语句末尾添加分号以及括号:
#!/bin/sh
rm /opt/file_name
if [ $? -ne 0 ]; then
echo 'error'
fi
exit
答案4
#!/bin/sh
rm somefile
if [ $? -ne 0 ]
then
echo 'error'
fi
exit