1

我正在编写一个简单的 bash 脚本 ( checkServs.sh),它将 ssh 进入服务器列表并对它们执行健康检查。

我不断收到以下行的错误:

SERVERS=(blah1.example.com blah2.example.com blah3.example.com blah4.example.com)

错误是:

checkServs.sh: 3: checkServs.sh: Syntax error: "(" unexpected

我检查了在线示例,这似乎是正确的,不是吗?提前致谢!

4

3 回答 3

4

我不知道语法错误,但这应该有效:

SERVERS="blah1.example.com blah2.example.com blah3.example.com blah4.example.com"
for server in $SERVERS
do
    echo $server
done

编辑:正如 Jonathan Leffler 在评论中指出的那样,也许您没有使用bash. 其他 shell,例如dash,可能无法识别数组语法。如果是这种情况,您可以这样做:

SERVERS=(blah1.example.com blah2.example.com blah3.example.com blah4.example.com)
for i in $(seq 0 3)
do
    echo ${SERVERS[$i]}
done

但是,如果您只想遍历名称并运行 SSH 命令(即,如果数组无法提供有用的功能),第一种方法更直接。

于 2013-08-15T03:10:00.493 回答
0

您的远程服务器在执行命令时可能会调用不同的 shell。尝试将 bash -c 添加到您的参数中:

ssh user@server bash -c "<your commands>"

或者:

ssh user@server bash < yourscript.sh  ## None in yourscript.sh must read input though.
于 2013-08-15T11:14:49.053 回答
-1

左括号开始一个子shell,在等号的右侧是不正确的。它需要一个字符串表达式,而不是一个命令。

引号用于将字符串表达式保持在一起。

于 2013-08-15T03:12:09.243 回答