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

时间:2014-06-12 11:09:25

标签: shell unix

我是shell脚本的新手,任何帮助都将不胜感激!!

我正在处理.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"

网络连接

我在if条件下遇到语法错误。 utils / main.sh:line 67:[slc06wmg.us.oracle.com:command not found

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

请帮助!!

1 个答案:

答案 0 :(得分:1)

'['。

之后需要一个空格

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 ] ...

确保所有需要空间的空间。 :)

相关问题