![Bash에서 json 파일 읽기 및 명령 실행](https://linux55.com/image/165526/Bash%EC%97%90%EC%84%9C%20json%20%ED%8C%8C%EC%9D%BC%20%EC%9D%BD%EA%B8%B0%20%EB%B0%8F%20%EB%AA%85%EB%A0%B9%20%EC%8B%A4%ED%96%89.png)
차단하고 싶어요사과어느 주소인가요?다운로드값이 "20480"을 초과합니다:
json 파일:
{
"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은 나에게 몇 가지 정보를 제공합니다. 이 파일에 따르면 다운로드 값이 "20480"을 초과 ac:07:5f:77:40:e9
하므로 차단하고 싶습니다 .58:48:44:db:ba:ba
이 작업을 수행하려면 bash 스크립트가 필요합니다.
차단하라는 명령사과주소:
ndsctl block ac:07:5f:77:40:e9
ndsctl block 58:48:44:db:ba:ba
나는 몇 가지 일을 했습니다:
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,
어떤 아이디어가 있나요?
답변1
대부분의 Unices에는 "ready-to-use"라는 명령줄 JSON 구문 분석기가 있습니다 jq
(패키지 시스템에서 설치해야 할 수도 있음).
이를 통해 20,480회 이상 다운로드된 항목의 MAC 주소를 쉽게 확인할 수 있습니다.
ndsctl block
일단 이것을 얻으면 다음을 사용하여 하나씩 전달할 수 있습니다 xargs
.
jq -r '.clients[] | select(.downloaded > 20480).mac' file.json |
xargs -n 1 ndsctl block
이는 JSON 문서가 file.json
.
특정 JSON 문서에 대해 두 개의 명령이 실행됩니다.
ndsctl block ac:07:5f:85:40:e9
ndsctl block 58:48:22:db:ba:be