我正在编写一个脚本来读取具有多个IP地址的文件,登录到每个系统(不涉及ssh密钥并手动输入密码),根据操作系统类型执行命令并打印结果。
以下是在hosts.txt文件中定义IP的方法
#~] cat hosts.txt
10.6.3.131
10.6.3.132
10.6.3.11
10.6.3.12
执行以下脚本时,会显示以下错误。此外,该脚本不会提示列表中的第二个和其他IP。可能导致这种情况的原因是什么?
# ./hq-test1.sh
root@10.6.3.131's password:
awk: cmd. line:1: NR==1{print
awk: cmd. line:1: ^ unexpected newline or end of string
bash: line 2: [: !=: unary operator expected
10.6.3.131 == PASS
这是测试中使用的脚本:
#!/bin/bash
while read HOST; do
if ssh root@$HOST '
STATUS=`awk 'NR==1{print $1}' /etc/*release`
[ $STATUS != "CentOS" ]
'; then
echo "$HOST == FAIL"
else
echo "$HOST == PASS"
fi
done < hosts.txt
答案 0 :(得分:2)
运行stdin
命令时,您的脚本未关闭ssh
,因此只处理列表的第一个主机。
我还简化了测试,因为awk
能够检查操作系统名称,并且不需要临时变量。
while read host; do
if ssh -n root@$host '[ "$(awk "/CentOS/{print}" /etc/*release)" ] '
then
echo "$host == PASS"
else
echo "$host == FAIL"
fi
done < hosts.txt
答案 1 :(得分:0)
这对我有用。正如我已经写过的那样,这只是一个引用问题。
#!/bin/bash
echo localhost | while read HOST; do
if ssh root@$HOST '
STATUS=`awk "NR==1{print \$1}" /etc/*release`
[ $STATUS != "CentOS" ]
'; then
echo "$HOST == FAIL"
else
echo "$HOST == PASS"
fi
done