曲径通幽论坛

 找回密码
 立即注册
搜索
查看: 5721|回复: 0
打印 上一主题 下一主题

[系统应用] [functions.sh]option 与 config_get

[复制链接]

4918

主题

5880

帖子

3万

积分

GROAD

曲径通幽,安觅芳踪。

Rank: 6Rank: 6

积分
34395
跳转到指定楼层
楼主
发表于 2014-12-5 01:41:59 | 只看该作者 回帖奖励 |倒序浏览 |阅读模式
在 functions.sh 中,使用 option() 来获得 option 配置的值;使用 config_get() 将某个 section 的 option 值赋值给一个变量。下面看具体分析。
先来看 option() ,定义如下:
[Bash shell] 纯文本查看 复制代码
option () {                      
        local varname="$1"; shift
        local value="$*"
        
        export ${NO_EXPORT:+-n} "CONFIG_${CONFIG_SECTION}_${varname}=$value"
        [ -n "$NO_CALLBACK" ] || option_cb "$varname" "$*"
}


为了便于分析,以 network 中的配置语句为例:
  1. config interface 'lan'
  2. option ifname 'eth0'
复制代码


按照上面代码,varname 的值为 ifname ;value 的值为 eth0。

接着将 value 赋值到变量 CONFIG_${CONFIG_SECTION}_${varname} 中,按照上面给出的配置例子,该变量展开就是 CONFIG_lan_ifname 。


option() 代码中最后一句是判断是否自定义了回调函数 option_cb,如果没有定义,它就不起什么作用。

接着看 config_get() 函数,定义如下:
[Bash shell] 纯文本查看 复制代码
# config_get <variable> <section> <option> [<default>]                      
# config_get <section> <option>                           
config_get() {          
        
        case "$3" in                                                        
                "") eval echo "\${CONFIG_${1}_${2}:-\${4}}";;
                *)  eval export ${NO_EXPORT:+-n} -- "${1}=\${CONFIG_${2}_${3}:-\${4}}";;
        esac     
        
}


该函数至少需要接 3 个参数。如注释中所示,第 2 个参数 <section> 是 section 名,如上面的 lan;第 3 个参数 <option> 是 option 名,如上面中的 ifname;第  1 个参数 <variable> 是 ifname 的值。下面用一段测试代码来演示:
[Bash shell] 纯文本查看 复制代码
#!/bin/sh          
                    
. /lib/functions.sh 
                                          
config_load network

config="lan"

config_get ipa "$config" ipaddr


echo $ipa



对于 lan 这个 section 的配置为:



代码输出结果为 192.168.2.1,函数使用正确。

为什么可以只通过 ${CONFIG_${2}_${3} 就能得到 option 里的值,并赋予变量 ${1} 中?答案是,早在 option() 函数里已经获得了 ${CONFIG_${2}_${3} 这个的定义,因此他不会去选择 ${4} 。

本帖子中包含更多资源

您需要 登录 才可以下载或查看,没有帐号?立即注册

x
您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

小黑屋|手机版|Archiver|曲径通幽 ( 琼ICP备11001422号-1|公安备案:46900502000207 )

GMT+8, 2025-5-3 13:57 , Processed in 0.071096 second(s), 28 queries .

Powered by Discuz! X3.2

© 2001-2013 Comsenz Inc.

快速回复 返回顶部 返回列表