比较shell脚本中的变量时出现问题

比较shell脚本中的变量时出现问题,shell,unix,Shell,Unix,我是一个新的外壳脚本,任何帮助将不胜感激 我正在处理一个.sh文件 我想检查3个变量中的值是否相同,然后做些什么 这是我的密码: #!/bin/sh +x echo "OID host name= $OID_HOST_NAME" echo "OIM host name=$OIM_HOST_NAME" echo "OHS host name=$OHS_HOST_NAME" echo "Printing done" if ["$OID_HOST_NAME" == $OIM_HOST_NAME ]&

我是一个新的外壳脚本,任何帮助将不胜感激

我正在处理一个.sh文件 我想检查3个变量中的值是否相同,然后做些什么 这是我的密码:

#!/bin/sh +x 
echo "OID host name= $OID_HOST_NAME"
echo "OIM host name=$OIM_HOST_NAME"
echo "OHS host name=$OHS_HOST_NAME"
echo "Printing done"
if ["$OID_HOST_NAME" == $OIM_HOST_NAME ]&& ["$OIM_HOST_NAME" == $OHS_HOST_NAME ]; then
        nodelist=ALL
echo "Inside if $nodelist"
else
echo "Inside else $nodelist"
fi

我在if条件下遇到语法错误。 utils/main.sh:第67行:[slc06wmg.us.oracle.com:未找到命令

我试过使用-eq运算符,但同样的错误


请帮忙!!

您需要在“[”后面留一个空格

shell编程上下文有点奇怪,因为所有内容都被视为命令行。因此所有变量替换实际上都是“文本”替换,结果文本随后被解析为命令行

您的if语句被替换为:

if ["$OID_HOST_NAME" ...

if [slc06wmg.us.oracle.com ...
然后shell尝试识别一个名为“[slc06wmg.us.oracle.com”的命令,这会导致您看到的错误

如果插入空格,您将有:

if [ slc06wmg.us.oracle.com ...
shell将解析为“if”、“[”,然后将参数“slc06wmg.us.oracle.com”传递给“[”命令

(在当时,“[”实际上是指向/bin/test的符号链接。现在,“[”在大多数shell内部都能理解。)

您也可以利用此行为来发挥优势。例如,要连接字符串,只需将它们相邻放置即可:

filepath=$directory/$filename

if [ -r $filepath ] ...
确保所有需要空间的东西周围都有空间。:)