如何在bash中正确存储host命令的输出
我试图存储主机提供的ip地址,但主机实际上给出了一个字符串,表示主机名的ip地址是它找到的地址的两倍。所以我的问题是,我是否可以只访问地址,而不拆分字符串和查找ip地址?到目前为止我试过的是这样的如何在bash中正确存储host命令的输出,bash,shell,ip-address,hostname,Bash,Shell,Ip Address,Hostname,我试图存储主机提供的ip地址,但主机实际上给出了一个字符串,表示主机名的ip地址是它找到的地址的两倍。所以我的问题是,我是否可以只访问地址,而不拆分字符串和查找ip地址?到目前为止我试过的是这样的 ip=$(host "$candidate") IFS="s " read -ra ADDR <<< "$ip" for i in "${ADDR[@]}"; do echo "$i" done ip=$(主机“$candidate”) IFS=“s”read-ra AD
ip=$(host "$candidate")
IFS="s " read -ra ADDR <<< "$ip"
for i in "${ADDR[@]}"; do
echo "$i"
done
ip=$(主机“$candidate”)
IFS=“s”read-ra ADDR您可以使用不同的DNS查找工具,例如:
$ 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
如果必须使用主机
,则必须进行字符串拆分:
foo=()
while read -r _ _ _ addr; do
foo+=("$addr")
done < <(host -t A google.com)
printf '%s\n' "${foo[@]}"
foo=()
而read-r addr;做
foo+=(“$addr”)
完成<您可以使用不同的DNS查找工具,例如:
$ 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
如果必须使用主机
,则必须进行字符串拆分:
foo=()
while read -r _ _ _ addr; do
foo+=("$addr")
done < <(host -t A google.com)
printf '%s\n' "${foo[@]}"
foo=()
而read-r addr;做
foo+=(“$addr”)
完成<您可以使用不同的DNS查找工具,例如:
$ 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
如果必须使用主机
,则必须进行字符串拆分:
foo=()
while read -r _ _ _ addr; do
foo+=("$addr")
done < <(host -t A google.com)
printf '%s\n' "${foo[@]}"
foo=()
而read-r addr;做
foo+=(“$addr”)
完成<您可以使用不同的DNS查找工具,例如:
$ 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
如果必须使用主机
,则必须进行字符串拆分:
foo=()
while read -r _ _ _ addr; do
foo+=("$addr")
done < <(host -t A google.com)
printf '%s\n' "${foo[@]}"
foo=()
而read-r addr;做
foo+=(“$addr”)
完成<您可以使用参数扩展/子字符串提取隔离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
您可以使用参数扩展/子字符串提取来隔离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
您可以使用参数扩展/子字符串提取来隔离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
您可以使用参数扩展/子字符串提取来隔离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
如果您从源/目标候选服务器为无密码访问设置了ssh访问密钥,则可以执行以下操作:ip=$(ssh用户@$候选“主机名-i”)。如果您从源/目标候选服务器为无密码访问设置了ssh访问密钥,则可以执行以下操作:ip=$(ssh用户@$候选“主机名-i”)如果您从源/目标候选服务器为无密码访问设置了ssh访问密钥,那么您可以执行:ip=$(ssh user@$CANDABLE“hostname-i”)如果您从源/目标候选服务器为无密码访问设置了ssh访问密钥,那么您可以执行:ip=$(ssh user@$CANDABLE“hostname-i”)为“${array[@}”中的i引用扩展--
,或者您已经为${array[*]}中的i编写了一个等价的
。类似地:数组+=(“${line###*}”)
,如果您希望每行有一个数组条目。或者:而IFS=''read r ip
;do数组+=(“$ip”);完成
通过将内容放入
,隐式地去除第一个``之后的所有内容,而不需要PE。是的,同意,但是主机的输出形式是google.com的地址为173.194.115.41
,这将导致read-r\uuuuu\IP
,如另一个答案所示。引用您的扩展--for i in“${array[@]}”,或者您已经为${array[*]中的i编写了一个等价的
。类似地:array+=(“${line##*}“
,如果您希望每行有一个数组条目。或者:而IFS=''read-r ip uu;do array+=(“$ip”);done
通过将内容放入
中,隐式地去除了第一个``之后的所有内容,而不需要PE。是的,同意,但主机的输出形式是google.com的地址为173.194.115.41
,这将导致另一个答案中所示的读取-r\uuuuuuuuuuuiP
。引用您的扩展--用于“${array[@]}”中的i
,或者您已经为“${array[*]}”中的i编写了一个等价的。类似地:数组+=(“${line###*}”)
,如果您希望每行有一个数组条目。或者:而IFS=''read r ip;'do array+=(“$ip”);done
通过将内容放入
中,隐式地去除了第一个``之后的所有内容,而不需要PE。是的,同意,但主机的输出形式是google.com的地址为173.194.115.41
,这将导致另一个答案中所示的读取-r\uuuuuuuuuuuiP
。引用您的扩展--用于“${array[@]}”中的i
,或者您已经为“${array[*]}”中的i编写了一个等价的。类似地:数组+=(“${line###*}”)
,如果您希望每行有一个数组条目。或者:而IFS=''read r ip;'do array+=(“$ip”);done
通过将内容放入
中,隐式地去除第一个``之后的所有内容。是的,同意,但主机的输出形式是google.com的地址为173.194.115.41
,这将导致另一个答案中所示的读取-r\uuuuuuuuu.IP
。对于bash 4或更新版本,de>readarray
可用:readarray-tfoo<使用bash 4或更新版本,readarray
可用:readarray-tfoo<使用bash 4或更新版本,readarray-tfoo>可用:readarray-tfoo<使用bash 4或更新版本,readarray
可用:readarray-tfoo<