这应该很简单,我以前在某个地方的脚本中完成它,我找不到我的例子(或等价物),今天这个问题正在驱使我走向疯狂.(即使我没有包含脚本的其余部分,这是在脚本中使用,而不是交互式.)
cat testfile | grep -e eth0
Run Code Online (Sandbox Code Playgroud)
返回:
eth0 123.45.67.8/23 u/u Internet - Cable WAN
Run Code Online (Sandbox Code Playgroud)
最终结果是我需要为每个元素设置变量.就好像我是手动完成的那样:
INTF = "etho"
IPADDR = "123.45.67.8/23"
STS = "u/u"
DESC = "Internet - Cable WAN"
Run Code Online (Sandbox Code Playgroud)
我以为我可以这样做:
cat testfile | grep -e eth0 | awk '{print $2}' | xargs read IPADDR
Run Code Online (Sandbox Code Playgroud)
要么
cat testfile | grep -e eth0 | cut -d " " -n2 | read IPADDR
Run Code Online (Sandbox Code Playgroud)
但是我尝试过的任何东西都带来了欢乐......我的路障(头部挡板)是什么?
编辑添加 - 脚本比仅抓取一个IP更复杂,因为我的例子引导人们得出结论.它是一个基于cron的脚本,每分钟运行一次,它通过8个接口运行一个循环,并在某些警报条件下发送消息.当我使用硬编码变量运行它时,脚本的其余部分工作,我只是切断了关于那些让我感到烦恼的部分.
由于你想设置 4 个变量,而不是执行cut4 次,你可以read这样使用:
#!/bin/bash
#
read INTF IPADDR STS DESC <<< $(cat testfile | grep -e eth0)
echo $INTF
echo $IPADDR
echo $STS
echo $DESC
Run Code Online (Sandbox Code Playgroud)
这将使用默认值“剪切”任何空白$IFS。
如果您想从“aaa,bbb,ccc,ddd”中删除值,
您可以更改read.
前任:
IFS="," read INTF IPADDR STS DESC <<< $(cat testfile | grep -e eth0)
Run Code Online (Sandbox Code Playgroud)