openwrt jshn工具和jshn.sh脚本分析

一. 前言

        jshn是一个小工具,用于解析或生成JSON格式的数据的,它的源代码位于libubox的jshn.c。jshn.sh是jshn的一个封装的脚本,位于openwrt系统的/usr/share/libubox/下。jshn.sh脚本主要让openwrt的脚本调用的来生成和解析json的,下面介绍shn工具和jshn.sh脚本的接口。

二. jshn.sh脚本分析

        接下来以一个脚本讲解jshn.sh脚本的一些函数的用法。脚本首先构建一个内容为"{ "msg": "Hello, world!", "test": { "testdata": 1 }, "lan": [ "192.168.1.1", "192.168.10.1", "192.168.100.1" ] }"的json字符串,然后再解析其中的每个成员。

案例:

#!/bin/sh
 
# source jshn shell library
. /usr/share/libubox/jshn.sh
 
# generating json data
json_init
json_add_string "msg" "Hello, world!"
json_add_object "test"
json_add_int "testdata" "1"
json_close_object
json_add_array lan
json_add_string 1 "192.168.1.1"
json_add_string 2 "192.168.10.1"
json_add_string 3 "192.168.100.1"
json_close_array
MSG=`json_dump`
# MSG now contains: { "msg": "Hello, world!", "test": { "testdata": 1 }, "lan": [ "192.168.1.1", "192.168.10.1", "192.168.100.1" ] }
 
 
# parsing json data
json_load "$MSG"
json_select test
json_get_var var1 testdata
json_select ..
json_get_var var2 msg
echo "msg: $var2 - testdata: $var1"

json_select lan
idx=1
while json_is_a $idx string
do
  json_get_var item $idx
  echo $item
  idx=$((idx+1))
done

. /usr/share/libubox/jshn.sh

        引用jshn.sh脚本的接口,jshn.sh在此处展开。

json_init

        初始化一个json实例。

json_add_string "msg" "Hello, world!"

        添加一个字符串json对象,“msg”:"Hello,world"。

json_add_object "test"

        添加一个test的json对象。

json_add_int "testdata" "1"

        往test json对象里面添加整数形对象,"testdata":1。

json_close_object

        关闭test对象。json_add_object添加对象后,后面必须调用json_close_object关闭对象。

json_add_array lan

        添加一个数组json对象,命名为lan。

json_add_string 1 "192.168.1.1"

json_add_string 2 "192.168.10.1"
json_add_string 3 "192.168.100.1"

        添加数组的第1,2,3项分别为"192.168.1.1","192.168.10.1"和"192.168.100.1"。

MSG=`json_dump`

        json_dump会以字符串打印上面添加的json数据,此处表示打印的内容赋值给MSG变量。内容为{ "msg": "Hello, world!", "test": { "testdata": 1 }, "lan": [ "192.168.1.1", "192.168.10.1", "192.168.100.1" ] }。

json_load "$MSG"

        json_load用于解析json字符串为json对象。

json_select test

        选择test json对象。注意:如果json对象是多层嵌套的,json_select每次只能选择一层,如果要获取最里面一层,json_select必须操作多次

json_get_var var1 testdata

        json_get_var用于获取testdata的值保存在var1中。        

json_select ..

        json_select选择上一层对象。

json_get_var var2 msg

        json_get_var用于获取msg的值保存在var2中。

json_select lan

        选择lan数组json对象。

idx=1

        初始化索引号为1,idx表示数组的下标。

while json_is_a $idx string

       json_is_a用于判断某个json变量的类型,此处用于判断lan数组json对象的第idx项是不是数组类型。

json_get_var item $idx

echo $item

        获取数组json对象第idx项的值,并赋值到item变量,并输出。

idx=$((idx+1))

        idx的值自加1。

三. 总结

        本文以一个脚本案例讲解jshn.sh的一些函数的用法,先通过添加函数构建一个json对象,然后通过解析函数获取各个json对象的值,加深对jshn.sh函数的熟悉。

### 通过 IP 地址访问 OpenWRT 路由器的管理界面 为了访问或配置位于 IP 地址 `192.168.16.254` 的 OpenWRT 路由器,需遵循特定步骤来确保连接的安全性有效性。 #### 使用 Web 浏览器访问 打开计算机上的任意一款现代浏览器,在地址栏输入 URL: ``` http://192.168.16.254 或 https://192.168.16.254 ``` 这将尝试建立与路由器内置 LuCI(Lightweight User interface for Configuration and Information)Web 界面之间的 HTTP/HTTPS 连接。如果启用了 HTTPS,则建议优先采用更安全的方式进行登录[^1]。 #### 输入凭证信息 首次加载页面时会被提示输入用户名密码,默认情况下可能是 admin/admin 或者 root/root, 不过具体取决于设备出厂设置或是之前用户的修改情况。对于新安装的系统,通常会在官方文档中给出默认账户详情;而对于已经部署过的环境则应联系管理员获取正确凭据。 #### 配置网络参数 成功登陆后可以进入“Network”菜单下的子项如Interfaces等处调整各项联网属性,包括但不限于静态路由表条目的增删改查操作。例如,若要添加一条通往远程子网的新路径可参照如下CLI命令格式转换成对应的图形化选项完成相同功能: ```shell ip route add 192.168.X.0/24 via 192.168.Y.Z dev ethN metric M ``` 其中 X、Y Z 分别代表目标网络段号以及下一跳地址中的相应部分,而 N 表示出口接口编号,M 则用于指定该记录相对于其他同目的地规则的重要性程度。不过请注意实际界面上的操作方式会有所不同,一般会有直观的选择框帮助用户填写这些值而不必手动键入完整的指令串。 #### 安全注意事项 考虑到安全性因素,在日常维护过程中应当定期更改管理账号口令并启用防火墙策略限制外部未授权访问行为。此外还可以考虑开启SSL加密传输以保护敏感数据交换过程免受中间人攻击威胁。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值