[英]bash script interpreting awk correctly
我有一个for循环脚本,需要登录到主机并获取其主机名和eth0接口的值。 我正在使用下面的代码,但是在bash脚本上运行时无法正确读取awk命令
#!/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
输出如下:
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
我需要的输出是这样的:
0021: addr:10.1.10.62
0022: addr:10.0.1.74
0023: addr:172.16.16.103
谢谢你的帮助
报价是一个难题。 当你写:
eth0_ip=$(ssh ... "$i" "sudo ifconfig eth0 | awk 'FNR==2 {print $2}'");
内部单引号''
不能阻止$2
扩展。 Shell看到$2
双引号。 它将执行变量扩展,很有可能未设置第二个参数(脚本为$2
)。 测试一下:
$ echo "sudo ifconfig eth0 | awk 'FNR==2 {print $2}'"
sudo ifconfig eth0 | awk 'FNR==2 {print }'
请转义$
,或在外部使用单引号,或者按照其他人的建议,在SSH命令外部使用awk
。
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.