首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >读取json文件并在Bash中运行命令。

读取json文件并在Bash中运行命令。
EN

Unix & Linux用户
提问于 2019-12-13 19:53:39
回答 1查看 4.4K关注 0票数 0

我想阻止下载值超过“20480”的mac地址:

json文件:

代码语言:javascript
复制
    {
  "client_length": 3,
  "clients": {
    "ac:07:5f:77:40:e9": {
      "id": 1,
      "ip": "192.168.5.40",
      "mac": "ac:07:5f:85:40:e9",
      "added": 1576258952,
      "active": 1576264642,
      "duration": 5711,
      "token": "4d8fd3ce",
      "state": "Authenticated",
      "downloaded": 45059,
      "avg_down_speed": 63.12,
      "uploaded": 2976,
      "avg_up_speed": 4.17
    },
    "ac:e0:10:55:2d:78": {
      "id": 2,
      "ip": "192.168.5.132",
      "mac": "ac:e0:10:12:2d:75",
      "added": 1576258985,
      "active": 1576264663,
      "duration": 5678,
      "token": "35dfa494",
      "state": "Authenticated",
      "downloaded": 18663,
      "avg_down_speed": 26.3,
      "uploaded": 4986,
      "avg_up_speed": 7.03
    },
    "58:48:44:db:ba:ba": {
      "id": 3,
      "ip": "192.168.5.93",
      "mac": "58:48:22:db:ba:be",
      "added": 1576258973,
      "active": 1576264662,
      "duration": 5690,
      "token": "139fede2",
      "state": "Authenticated",
      "downloaded": 187876,
      "avg_down_speed": 264.15,
      "uploaded": 7910,
      "avg_up_speed": 11.12
    }
  }
}

此外,这是ndsctl json的结果,而且它总是会被更改的。ndsctl是nodogsplash包的一部分。我已经在OpenWrt上安装了这个软件包(BusyBox v1.28.4)。

我的目标:

上面的json给了我一些信息。根据这个文件,我想阻止ac:07:5f:77:40:e958:48:44:db:ba:ba,因为它们的下载值超过了"20480“。

我需要一个bash脚本来帮我做到这一点。

阻止mac地址的命令:

ndsctl block ac:07:5f:77:40:e9

ndsctl block 58:48:44:db:ba:ba

我做了一些事:

代码语言:javascript
复制
root@OpenWrt:~# cat test.json | grep "mac\|downloaded"
"mac":"ac:07:5f:85:40:e9",
"downloaded":45059,
"mac":"ac:e0:10:55:2d:78",
"downloaded":18663,
"mac":"58:48:44:db:ba:ba",
"downloaded":187876,

有什么想法吗?

EN

回答 1

Unix & Linux用户

回答已采纳

发布于 2019-12-13 20:12:01

命令行中有一个名为jq的JSON解析器,用于大多数Unices (这可能必须从包系统中安装)。

使用它,可以很容易地解析下载超过20480次的条目的MAC地址。

获取这些信息后,您可以使用ndsctl block将它们一个接一个地传递给xargs

代码语言:javascript
复制
jq -r '.clients[] | select(.downloaded > 20480).mac' file.json |
xargs -n 1 ndsctl block

这假设JSON文档保存在file.json中。

对于给定的JSON文档,这将运行以下两个命令

代码语言:javascript
复制
ndsctl block ac:07:5f:85:40:e9
ndsctl block 58:48:22:db:ba:be
票数 4
EN
页面原文内容由Unix & Linux提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://unix.stackexchange.com/questions/557105

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档