Warning: file_get_contents(/data/phpspider/zhask/data//catemap/5/bash/16.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
如何在bash中正确存储host命令的输出_Bash_Shell_Ip Address_Hostname - Fatal编程技术网

如何在bash中正确存储host命令的输出

如何在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地址,但主机实际上给出了一个字符串,表示主机名的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 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<