管理多台服务器

管理多台服务器

我编写了一个简单的脚本,我想在多个主机上运行它。 (即,我想运行一个实例脚本,但让其在多个主机上运行。)脚本有效,但仅适用于第一台主机。当我添加多个主机时,我收到一条错误消息:

line 3: MACHINE2: command not found

我究竟做错了什么?脚本发布在下面。

#!/bin/sh

HOSTS=MACHINE1 MACHINE 2

for i in $HOSTS; do echo $i
    ssh -q $i uname -a;
done

答案1

像这样的命令

xyz=abc def ghi jkl

表示使用def参数ghi和运行程序jkl,并将环境变量xyz设置为abc。设置HOSTS为字符串

MACHINE1 MACHINE 2

你需要说

HOSTS="MACHINE1 MACHINE 2"

(尽管我假设您不想在第二个MACHINE和之间有空格2。)您可能可以使其工作,因为主机名不包含空格或其他特殊字符。然而,使用数组可能更聪明:

HOSTS=(MACHINE1 MACHINE2)

for i in "${HOSTS[@]}"
do
    echo "$i"
    ssh -q "$i" uname -a
done

此结构允许您拥有带有特殊字符的多字数组元素:

lyrics=("Twinkle twinkle little *" "How I wonder what you are")

for line in "${lyrics[@]}"
do
    printf "%s\n" "$line"
done

请注意,您应该始终引用所有 shell 变量引用(例如,"${HOSTS[@]}""$i"),除非您有充分的理由不这样做,并且您当然你知道你在做什么。还,

  • 行尾不需要分号。 
  • 在 shell 脚本中,通常使用小写字母作为脚本变量名称,因为传统上系统变量均使用大写字母。
  • echo对于打印固定字符串很方便,但它可以用任意数据做意想不到的事情。它是远的使用更安全printf

相关内容