加入收藏 | 设为首页 | 会员中心 | 我要投稿 李大同 (https://www.lidatong.com.cn/)- 科技、建站、经验、云计算、5G、大数据,站长网!
当前位置: 首页 > 综合聚焦 > 服务器 > 安全 > 正文

将分隔输出读入多个Bash变量

发布时间:2020-12-15 21:49:51 所属栏目:安全 来源:网络整理
导读:这应该很简单,我以前在某个地方的脚本中完成它,我找不到我的例子(或等价物),今天这个问题正在驱使我走向疯狂. (即使我没有包含脚本的其余部分,这是在脚本中使用,而不是交互式.) cat testfile | grep -e eth0 返回: eth0 123.45.67.8/23 u/u Internet - Cabl
这应该很简单,我以前在某个地方的脚本中完成它,我找不到我的例子(或等价物),今天这个问题正在驱使我走向疯狂. (即使我没有包含脚本的其余部分,这是在脚本中使用,而不是交互式.)

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个接口运行一个循环,并在某些警报条件下发送消息.当我使用硬编码变量运行它时,脚本的其余部分工作,我只是切断了关于那些让我感到烦恼的部分.

解决方法

由于您要设置4个变量,而不是执行4次变换,您可以使用如下所示的读取:

#!/bin/bash
#
read INTF IPADDR STS DESC <<< $(cat testfile | grep -e eth0)

echo $INTF
echo $IPADDR
echo $STS
echo $DESC

这将使用默认的$IFS“切割”任何空白区域.

如果你想减少以下值:“aaa,bbb,ccc,ddd”,
您可以在读取之前更改IFS值.

例如:

IFS="," read INTF IPADDR STS DESC <<< $(cat testfile | grep -e eth0)

(编辑:李大同)

【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容!

    推荐文章
      热点阅读