Linux 我是否为我的shell脚本使用了正确的语法?
我编写了一个shell脚本,该脚本从文件中获取一个值,并基于该值,我希望回显一条特定的消息。我的控制台一直说第7行和第9行有错误。任何关于如何修复的建议都将不胜感激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
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),等等。