我正在尝试使用cli命令捕获多个远程设备的输出,然后使用grep717ge并打印到多台主机的屏幕。正如您在下面看到的,它从$hosts捕获IP并将其传递给$outip,而不是从命令行使用相同的命令时所示。我认为该变量将捕获从给定命令返回的数据。有没有人能帮助我,让我明白我做错了什么?我真的对学习很感兴趣,所以请不要发表尖酸刻薄的评论。如果可能的话。
for host in ${hosts[@]}; do
seven=( $(cli $hosts show gpon ont summary -n --max=3 --host ) )
outip=( $(grep 717GE $seven) )
echo $outip
done输出:
+ for host in '${hosts[@]}'
+ seven=($(cli $hosts show gpon ont summary -n --max=3 --host ))
++ cli 10.100.112.2 show gpon ont summary -n --max=3 --host
+ outip=($(grep 717GE $seven))
++ grep 717GE 10.100.112.2 grep: 10.100.112.2: No such file or directory发布于 2013-06-28 00:26:47
除非您想要创建一个数组,否则不要使用var=( .. ),并在这里使用bash -string grep something <<< "$var" (相当于echo "$var" | grep something)来搜索匹配的行(否则您会说$var包含一个要搜索的文件名的列表,以及为grep设置的一些选项):
for host in ${hosts[@]}; do
# Assign as variable rather than array, and use $host instead of hosts
seven=$(cli $host show gpon ont summary -n --max=3 --host )
# Grep with "$seven" as text input and not as a list of filenames
outip=$(grep 717GE <<< "$seven")
echo "$outip"
donehttps://stackoverflow.com/questions/17347262
复制相似问题