我需要Ansible主机文件中的条目,并以某种方式进行格式化,以便可以在Linux上的普通主机文件中使用它。通过在脚本中两次调用nslookup,我可以实现这一目标。
我只调用一次nslookup的目标,但我不知道如何将if语句中的nslookup输出转换为变量。
我已经尝试过了
if [[ $(nslookup $i > $DNSHOST) && $? == 0 ]]
if [[ $(nslookup $i > $DNSHOST && $? == 0) ]]
if (($(nslookup $i > $DNSHOST) && $? == 0))
if [[ $("nslookup $i > $DNSHOST") && $? == 0 ]]
...以及许多其他组合,但无济于事?
此脚本可以工作,并且可以完成工作:
for i in $HOSTS; do
if [[ $(nslookup $i) && $? == 0 ]]; then
nslookup $i | sed -e '1,3d;6d' | cut -d$'\t' -f2 | cut -d ' ' -f2 | xargs -n2 | awk '{print $2,"\t",$1}'
fi
done
这是我无法上班的东西:
for i in $HOSTS; do
if [[ $(nslookup $i > $DNSHOST) && $? == 0 ]]; then
cat $DNSHOST | sed -e '1,3d;6d' | cut -d$'\t' -f2 | cut -d ' ' -f2 | xargs -n2 | awk '{print $2,"\t\t",$1}'
fi
done
当我使用双引号时,出现错误“目录不存在”。 否则,它只会在没有nslookup的情况下循环所有主机列表。
答案 0 :(得分:1)
不确定,您想要什么。
但这看起来很好奇:
if [[ $(nslookup $i > $DNSHOST) && $? == 0 ]]
请尝试:
if nslookup $i > $DNSHOST
答案 1 :(得分:0)
如果要捕获nslookup输出,仍然可以在if命令的条件部分中执行该操作:
if output=$( nslookup ... ); then
# do something with "$output"
fi
if [[ $(nslookup $i > $DNSHOST) && $? == 0 ]]
$(nslookup $i > $dnshost)
和$? == 0
&&
发生短路,因此,如果第一个表达式的计算结果为false,则布尔结果不能为true,并且不考虑第二个表达式。请注意,if
命令的条件不必放在方括号中。如果您想编写一个if命令来对某些命令的退出状态起作用,那么您只需编写
if some_command; then ...; else ...; fi
在交互式提示下:help if
,help [[
,help test