Linux 我是否为我的shell脚本使用了正确的语法?

Linux 我是否为我的shell脚本使用了正确的语法?,linux,bash,shell,Linux,Bash,Shell,我编写了一个shell脚本,该脚本从文件中获取一个值,并基于该值,我希望回显一条特定的消息。我的控制台一直说第7行和第9行有错误。任何关于如何修复的建议都将不胜感激 export JAVA_HOME='/Library/Java/JavaVirtualMachines/jdk1.8.0_171.jdk/Contents/Home' echo $JAVA_HOME export CLASSPATH='/Users/edgarjohnson/Desktop/JarFiles/mlDownload.j

我编写了一个shell脚本,该脚本从文件中获取一个值,并基于该值,我希望回显一条特定的消息。我的控制台一直说第7行和第9行有错误。任何关于如何修复的建议都将不胜感激

export JAVA_HOME='/Library/Java/JavaVirtualMachines/jdk1.8.0_171.jdk/Contents/Home'
echo $JAVA_HOME
export CLASSPATH='/Users/edgarjohnson/Desktop/JarFiles/mlDownload.jar:/ddc/config'
echo $CLASSPATH
var=$(cat /ddc/config/LastRefreshDate.dat)
echo $var
if [$var > 0 ];then
        echo "Run Get Latest Update Class"
elif [$var = 0]; then
        echo "No need to run any updates"
fi

[
之后和
]
之前必须有一个空格。否则,变量将被替换,shell将尝试执行一个名为
[which
的程序

[
本身实际上只是一个二进制文件,它是以
var
的内容、
=
0
]
作为参数执行的,它的返回代码用于确定是采用
if
还是
else
分支

但是,所使用的运算符实际上并不是您想要使用的运算符,例如,
被解释为shell重定向,创建一个名为
0
(或覆盖它)的文件,并且实际上没有比较任何内容,请改为使用
-gt
=
检查字符串相等性,
-eq
检查值相等性


正如在评论中提到的,最好使用
[[[]]
而不是
[]

来代替
[[[]/code>。
不是传递给
[
>的参数,而是重定向操作符,因此
[$var>0]
尝试运行由字符串
标识的程序[$var
输出到一个新创建的名为
0
的文件中。实际上,您应该使用[[…],这样可以避免变量扩展并降低引用的需要。此外,由于这是一个数值比较,所以它应该是[[$var-gt 0]]和[$var-eq 0]]@williampersell我已经修复了这个错误,我也建议阅读bash手册。我知道有很多,但这是编写shell脚本的最佳来源。另请参阅,(U&L.SE),(SO),(AskU),等等。