![用于检查服务器状态的 Shell 脚本](https://linux22.com/image/21237/%E7%94%A8%E4%BA%8E%E6%A3%80%E6%9F%A5%E6%9C%8D%E5%8A%A1%E5%99%A8%E7%8A%B6%E6%80%81%E7%9A%84%20Shell%20%E8%84%9A%E6%9C%AC.png)
我正在编写一个脚本,它将通过 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
变量的值。