我试图存储主机提供的IP地址,但主机实际上给出了一个字符串,说明主机名的地址 ip-address 多次找到的许多地址。所以我的问题是我可以以某种方式访问地址,而不分割字符串和寻找IP地址?我到目前为止所尝试的内容看起来像这样
ip=$(host "$candidate")
IFS="s " read -ra ADDR <<< "$ip"
for i in "${ADDR[@]}"; do
echo "$i"
done
其中$候选人持有主机名,但我无法真正将其用于工作。有什么想法吗?
答案 0 :(得分:2)
您可以使用其他DNS查找工具,例如dig:
$ foo=($(dig google.com +short))
$ printf '%s\n' "${foo[@]}"
74.125.228.196
74.125.228.206
74.125.228.200
74.125.228.198
74.125.228.193
74.125.228.192
74.125.228.199
74.125.228.197
74.125.228.201
74.125.228.195
74.125.228.194
如果必须使用host
,则必须进行字符串拆分:
foo=()
while read -r _ _ _ addr; do
foo+=("$addr")
done < <(host -t A google.com)
printf '%s\n' "${foo[@]}"
答案 1 :(得分:1)
您可以使用参数扩展/子字符串提取隔离IP地址,如下所示:
#!/bin/bash
while read -r line; do
array+=( ${line##* } ) # substring extraction for IP only
done < <(host -t A google.com)
for i in ${array[@]}; do
echo "$i"
done
<强>输出:强>
$ bash getip.sh
173.194.115.36
173.194.115.35
173.194.115.40
173.194.115.37
173.194.115.34
173.194.115.39
173.194.115.41
173.194.115.46
173.194.115.33
173.194.115.38
173.194.115.32
您可以使用字符串替换
完成相同的操作 array+=( ${line//*\ /} ) # string substitution for IP only