OpenWrt基于脚本实现ubus call script

在本教程中,我们将向您展示如何为 ubus 创建一个可执行的 shell 脚本。我们还建议阅读 OpenWRT 关于此主题的 wiki,链接可在此处找到:OpenWRT Wiki

此外,用户还应熟悉 JSON 格式,因为这是向 UBUS 服务传递信息的格式。有关 JSON 格式的简要概述,请参阅此链接

UBUS Shell 脚本

ubus shell 脚本与普通 shell 脚本有两个显著区别,这些区别将在我们的示例中体现。

  1. 输入/输出
               所有 ubus shell 脚本的输入/输出都采用 JSON 格式。这种格式确保了所有 ubus 服务之间的兼容性。JSON 也是在网络上传输数据的常用格式,因此请确保您熟悉其使用。典型的 JSON 对象/文件如下所示:

    '{"argument1":"value1", "argument2":"value2","argument3":"value3"}'
  2. List 和 Call 函数
               ubus shell 脚本还必须支持 list 和 call 函数,以便与 ubus 连接。从第一个 ubus 教程 中我们了解到,我们使用 ubus list 函数来展示如何使用服务,并使用 ubus call 来实际访问服务。这两种功能都在 shell 脚本中描述。

示例

在我们的示例中,我们将创建一个简单的 ubus 可执行 shell 脚本,用于计算两个整数的加法和减法,并以 JSON 格式返回结果。

首先,导航到 rpcd 目录:

cd /usr/libexec/rpcd

现在使用 cat 创建一个名为 Math 的文件:

cat > Math

然后粘贴以下代码:

#!/bin/sh
. /usr/lib/onion/lib.sh  
# 包含解析 JSON 文件所需的功能

case "$1" in
    # list 函数描述如何使用 ubus 函数
    list)
        echo '{ "addition": { "argument1": "value" , "argument2":"value"}, "subtraction": { "argument1": "value", "argument2":"value"} }'
    ;;
    # call 函数描述可用的方法
    call)
        case "$2" in
            # 加法方法
            addition)
                # 读取参数
                read input
                # 将参数加载到 JSON 中以便检索
                json_load "$input"
                # 使用下面的函数,将 "argument1" 的值存储在变量 val1 中
                json_get_var val1 "argument1"
                json_get_var val2 "argument2"
                # 计算两数之和
                ans=$(($val1+$val2))
                # 使用 \ 来正确替换
                echo "{ \"The ans is\" :\"$ans\"}"
            ;;
            subtraction)
                # 读取参数
                read input
                # 将参数加载到 JSON 中
                json_load "$input"
                # 使用下面的函数,将 "argument1" 的值存储在变量 val1 中
                json_get_var val1 "argument1"
                json_get_var val2 "argument2"
                # 计算两数之差
                ans=$(($val1-$val2))
                # 使用 \ 来正确替换
                echo "{ \"The ans is\" :\"$ans\"}"
            ;;
        esac
    ;;
esac

粘贴代码后,按 CTRL+D 保存文件。

完成后,通过更改文件权限使文件可执行,输入以下命令:

chmod +x Math

之后,需要重启 rpcd 插件以识别我们刚添加的新服务。输入以下命令:

/etc/init.d/rpcd restart

这会将您的服务附加到 ubus。

mcdiKW3.png

现在检查服务是否已列出。运行以下命令检查服务是否可用:

ubus list

Ys2ZbeV.png

如您所见,Math 已列在我们的 ubus 服务中。如果没有,请尝试运行 /etc/init.d/rpcd stop 然后 /etc/init.d/rpcd start,或重启您的 Omega。

现在尝试使用它,输入以下命令查看结果:

ubus list -v Math
ubus call Math addition '{"argument1":"4","argument2":"6"}'
ubus call Math subtraction '{"argument1":"4","argument2":"6"}'

zKpubtZ.png

至此,我们的 Ubus 迷你系列教程到此结束。

本文章由作者:佐须之男 整理编辑,原文地址: OpenWrt基于脚本实现ubus call script
本站的文章和资源来自互联网或者站长的原创,按照 CC BY -NC -SA 3.0 CN协议发布和共享,转载或引用本站文章应遵循相同协议。如果有侵犯版权的资 源请尽快联系站长,我们会在24h内删除有争议的资源。欢迎大家多多交流,期待共同学习进步。

相关推荐