我的脚本有问题。当我运行脚本时,它起作用了。但它连接到单个服务器。 “iplist.txt”正在连接到第一个 IP 地址字段。它没有连接到其他服务器。我不知道我哪里做错了。你能帮助我吗 ?
我研究并应用了以前提出的许多问题。但结果又是一样的。
我想将来将此脚本用于不同的目的。我有140台linux服务器并且有zabbix代理。但是服务器上的 zabbix 代理已经过时了。
我的脚本;
#!/bin/bash
#set -x
servers=/Users/spala/works/iplist.txt
#set -u
while read -u140 multiplessh;
do
USER="testuser"
PASS="testpassword"
PORT="55022"
current_ver="3.2.3"
command1="/usr/sbin/zabbix_agentd -V & hostname -f /dev/null"
connection_method=`/usr/local/bin/sshpass -p $PASS /usr/bin/ssh -n -p$port -o StrictHostKeyChecking=no $user@$multiplessh $command1`
first_step="$connection_method"
###
result=$(echo $first_step |grep 'zabbix_agentd\|.spala' | awk '{print $1, $5}')
# - 'zabbix_agentd' ---> "zabbix_agent -V" command output..
# - '.spala' my server hostname fqdn..--> test.spala test1.spala test2.spala
hostname=$(echo $result |awk '{print $1}')
version=$(echo $result |awk '{print $2}')
if [[ "$version" == "$current_ver" ]]
then
echo "$hostname used version ---> $version"
echo "Version is ok..."
exit 1
else
echo "$hostname used version ---> $version"
echo "Old version.. Need update !"
exit 1
fi
exit 0
done 140<"$servers"
脚本结果;
sh test.sh
test1.spala used version ---> 3.2.2
Old version.. Need update !
我的 iplist 文件;
cat /Users/spala/works/iplist.txt
1.1.1.1
2.2.2.2
3.3.3.3
4.4.4.4
5.5.5.5
...
total 140 servers
答案1
注意到脚本中的exit 1
和行了吗?exit 0
他们明确停止脚本。您可能从其他地方复制了此文件,打算作为独立文件运行,但在您的情况下,这仅意味着脚本将在连接到第一个 IP 后退出。
当然,这不是您应该实现的目标。
- 不要使用 sshpass 进行日常操作。使用一次即可设置密钥身份验证
- 考虑使用 Puppet、Chef 等系统管理工具
- 考虑使用合适的包,然后您可以使用包管理工具来验证版本。此外,使用包存储库可以轻松进行升级管理