用于检查服务器状态的 Shell 脚本

用于检查服务器状态的 Shell 脚本

我正在编写一个脚本,它将通过 ssh 进入 VMWare 服务器并检查虚拟机是否已启动。线路中有一些错误server=awk "/$i/{print $2}" /home/dharmit/scripts/vmids。我收到以下错误

./server_notify.sh: line 38: /688/{print }: No such file or directory

我知道我在引用时犯了一些错误。但我找不到错误是什么。

for i in {144,528,544,576,592,624,640,688}
do
        ssh [email protected] vim-cmd vmsvc/power.getstate $i | grep off > /dev/null
        if [ $? -eq 0 ]
        then
                server=awk "/$i/{print $2}" /home/dharmit/scripts/vmids
                echo "$server is Down"
        fi
done

/home/dharmit/scripts/vmids 的内容

144 Web Server
528 N-Zimbra Mail Server
544 Zenoss
576 OTRS Supporting Tool
592 Proconsol
624 SVN
640 SFTP
688 FTP

有人可以指出我在哪里犯了错误以及解决方案是什么吗?

答案1

您缺少 awk 命令周围的反引号,并且双引号允许 shell 而不是 awk 插入 $2 。 server= 行应为:

server=`awk "/$i/"' {print $2}' /home/dharmit/scripts/vmids`

双引号允许 shell 插入 $i ,这显然是您想要的。单引号防止 shell 插值 $2。反引号导致 awk 命令运行,并将其结果转换为字符串,该字符串成为server变量的值。

相关内容