【发布时间】:2019-01-31 10:56:57
【问题描述】:
这应该很简单,我以前在某个脚本中做过,但找不到我的示例(或等效示例),而今天这个问题让我发疯了。 (即使我没有包含脚本的其余部分,这是在脚本中使用的,而不是交互式的。)
cat testfile | grep -e eth0
返回:
eth0 123.45.67.8/23 u/u Internet - Cable WAN
最终结果是我需要为每个元素设置变量。即好像我是手动完成的:
INTF = "etho"
IPADDR = "123.45.67.8/23"
STS = "u/u"
DESC = "Internet - Cable WAN"
我想我可以这样做:
cat testfile | grep -e eth0 | awk '{print $2}' | xargs read IPADDR
或
cat testfile | grep -e eth0 | cut -d " " -n2 | read IPADDR
但我所尝试的一切都没有带来快乐......我的障碍是什么(头障)?
编辑添加——该脚本比仅获取一个 IP 更复杂,正如我的示例引导人们得出的结论。这是一个基于 cron 的脚本,每分钟运行一次,它通过 8 个接口循环运行,并在某些警报条件下发送消息。当我使用硬编码变量运行脚本时,脚本的其余部分可以正常工作,我只是询问了困扰我的部分。
【问题讨论】:
-
为什么不直接使用
IPADDR=$(cat outputfile | grep -e eth0 | awk '{print $2}')? -
顺便说一句,在您对问题的描述中,您在第一个示例中使用
outputfile作为文件名,在第二个示例中使用testfile。小心点。 -
@NéstorLucasMartínez 这是一种可能性,我没想过这样分配,但是我的示例过于简单,因为这是一个基于 cron 的脚本,每分钟运行一次,并循环通过 8 个接口。 (这不仅仅是一个获取单个 IP 并运行的脚本。)当然,我实际上并不需要设置 INTF,因为它在那时已经知道,但在每个循环中按照建议执行 3 次似乎效率低下。
-
那你可以试试
read INTF IPADDR STS DESC <<< `cat testfile | grep -e eth0`
标签: bash