如何修复此错误?我的语法没有任何问题。
ipcheck() {
echolog "[INFO] Enabling IP Forwarding..."
sudo echo 1 > /proc/sys/net/ipv4/ip_forward
if[$(cat /proc/sys/net/ipv4/ip_forward) == "0"]
then
echolog "[CRITICAL] Could not enable IP Forwarding!"
exit 0
fi
echolog "[INFO] IP Forwarding successfully enabled!"
}
我知道这是一个非常基本的脚本,但它是一个更大的脚本的一部分。错误发生在then语句中。
答案 0 :(得分:5)
如果你来自其他编程语言,那么shell脚本往往比你可能习惯的空间更敏感(读:C)。您的if
行存在问题。您可能正在寻找:
if [ $(cat /proc/sys/net/ipv4/ip_forward) == "0" ]
这里要记住的是[
不是任何特殊if
语法的一部分 - 它是程序的名称(有时是内置的shell)。如果你这样想,你可以看到命令行解析器需要如何分离它。类似地,[
命令(或内置)期望结束]
与其他参数分开,因此您也需要一个空格。
答案 1 :(得分:2)
问题是您需要if
和[
之间的空格。缺乏空间让bash的解析器感到困惑。
答案 2 :(得分:2)
在第4行的if
和[$(cat...]
部分之间放置一个空格。要运行此脚本,您还需要在同一行的]
上留出空格。< / p>
在相关的说明中,如果您没有在shell脚本中使用缩进,则应认真考虑它,因为它使代码的维护和易读性变得更加容易。
答案 3 :(得分:0)
稍微重构(改进)的不依赖于bash的版本:
#!/bin/sh
ipcheck() {
echolog "[INFO] Enabling IP Forwarding..."
sudo echo 1 > /proc/sys/net/ipv4/ip_forward || {
echolog "[CRITICAL] Error echoing to ip_forward file"
exit 1
}
# Paranoia check :)
status=$(cat /proc/sys/net/ipv4/ip_forward)
[ "$status" = "1" ] || {
echolog "[CRITICAL] Could not enable IP Forwarding!"
exit 1 # 1 is error in scripts, 0 is success
}
echolog "[INFO] IP Forwarding successfully enabled!"
}
最好制作error()
函数,可能类似于:
# Call it like: error "[INFO] Could not ..."
error() {
echolog "$*"
exit 1
}
哦,是的,正如其他人所指出的,不要忘记空间:)