gpt4 book ai didi

linux - bash 脚本正确解释 awk

转载 作者:太空宇宙 更新时间:2023-11-04 10:40:16 24 4
gpt4 key购买 nike

我有一个 for 循环脚本,需要登录主机并获取主机名和 eth0 接口(interface)的值。我正在使用下面的代码,但是在 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

关于linux - bash 脚本正确解释 awk,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/35437115/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com