首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >正确解释awk的bash脚本

正确解释awk的bash脚本
EN

Stack Overflow用户
提问于 2016-02-16 23:55:55
回答 1查看 115关注 0票数 0

我有一个for循环脚本,需要登录到主机并获取它们的主机名和eth0接口值。我正在使用以下代码,但在bash脚本上运行awk命令时无法正确读取该命令

代码语言:javascript
复制
    #!/bin/bash

for i in `cat test.txt`;

do

store_number=$(ssh -q -A -o userknownhostsfile=/dev/null -o stricthostkeychecking=no -o batchmode=yes -o connecttimeout=5 "$i" "hostname | cut -c4-7");

eth0_ip=$(ssh -q -A -o userknownhostsfile=/dev/null -o stricthostkeychecking=no -o batchmode=yes -o connecttimeout=5 "$i" "sudo ifconfig eth0 | awk 'FNR==2 {print $2}'");

output="${store_number}: ${eth0_ip}"; echo $output >> /home/eth0status.txt;

done

输出结果如下:

代码语言:javascript
复制
0021: inet addr:10.1.10.62 Bcast:10.1.10.255 Mask:255.255.255.0

0022: inet addr:10.0.1.74 Bcast:10.0.1.255 Mask:255.255.255.0

0023: inet addr:172.16.16.103 Bcast:172.16.16.255 Mask:255.255.255.0

我需要输出如下所示:

代码语言:javascript
复制
0021: addr:10.1.10.62 

0022: addr:10.0.1.74

0023: addr:172.16.16.103

谢谢你的帮忙

EN

回答 1

Stack Overflow用户

发布于 2016-02-17 02:41:20

报价是一个很难的问题。当你写的时候:

代码语言:javascript
复制
eth0_ip=$(ssh ... "$i" "sudo ifconfig eth0 | awk 'FNR==2 {print $2}'");

内部单引号''不会阻止$2的扩展。shell将$2放在双引号中。它将执行变量扩展,并且您的第二个参数(脚本的$2)很可能未设置。测试一下:

代码语言:javascript
复制
$ echo "sudo ifconfig eth0 | awk 'FNR==2 {print $2}'"
sudo ifconfig eth0 | awk 'FNR==2 {print }'

或者转义$,或者在外部使用单引号,或者按照其他人的建议,在SSH命令外部使用awk

票数 1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/35437115

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档