如果 shell 上的条件不起作用,不确定我犯了什么错误?

如果 shell 上的条件不起作用,不确定我犯了什么错误?

我需要根据服务器执行一组特定的任务,所以我想根据服务器定义条件。这是我想出的脚本,我已经阅读了多个博客,但在我的脚本中找不到任何错误。您能指导一下我在这里忽略的内容吗?

#!/bin/bash
SERVER_NAME=`hostname -s`
hostname -s
DBServer=(servr1 servr2 servr3 servr4)
#AppServer=[hqidlfdiwa01 , hqiqlfdiwa01]
echo "Values of DBServer seeing is ${DBServer[*]}"
Values of DBServer seeing is servr1 servr2 servr3 servr4
for i in ${DBServer[*]}
do
  echo "current value in I is $i"
  echo "The server name found is $SERVER_NAME"
  if [$SERVER_NAME == $i]
  then
    echo "I am on one of the servers and it is $i"
  fi
done

我在服务器上看到的输出是

current value in I is servr1
The server name found is servr1
-bash: [servr1: command not found
current value in I is servr2
The server name found is servr1
-bash: [servr1: command not found
current value in I is servr3
The server name found is servr1
-bash: [servr1: command not found
current value in I is servr4
The server name found is servr1
-bash: [servr1: command not found

答案1

在 shell 中,空间很重要。

代替:

if [$SERVER_NAME == $i]

和:

if [ "$SERVER_NAME" = "$i" ]

如果没有空格,shell 会认为您要运行名为[$SERVER_NAME(例如[servr1)且带有参数==和 的命令$i]。有了这个空间,shell 就可以运行测试命令,用 表示[

另外,始终将 shell 变量放在双引号中,除非您了解将应用哪些 shell 扩展并且明确希望应用它们。

最后,虽然 bash 接受===表示内部字符串相等[...],但其他 shell 只理解=。为了可移植性,最佳实践是=在 内部使用 string-equal [...]

相关内容