如何在OpenWRT中使用uci命令获取所有配置选项

如何在OpenWRT中使用uci命令获取所有配置选项

我正在配置运行 OpenWRT 的路由器,但我很难理解如何使用uci命令(统一配置界面)来检查现有的配置文件。我想在 shell 脚本中自动执行此配置。

以防火墙配置为例,/etc/config/firewall其长度为 195,因此使用cat.

有多种规则,采用第一个:

root@OpenWrt:/etc/config# grep -B1 -A6 'Allow-DHCP-Renew' /etc/config/firewall
config rule
    option name     Allow-DHCP-Renew
    option src      wan
    option proto        udp
    option dest_port    68
    option target       ACCEPT
    option family       ipv4

root@OpenWrt:/etc/config# 

我可以检查第一条规则 ( ) 的各个字段,@rule[0]例如该字段name

root@OpenWrt:/etc/config# uci get firewall.@rule[0].name
Allow-DHCP-Renew
root@OpenWrt:/etc/config# 

但我看不到整个规则作为输出,我已经尝试过,uci get firewall.@rule[0].*但这不是正确的语法。

没有uci( man uci) 的手册,因此我不确定在哪里可以找到有关如何使用该命令的信息。

这种“集体获得”到底有可能吗?

答案1

如果您想创建一个脚本来使用设备上的所有当前设置来设置 OpenWRT。

#!/bin/sh
# Create OpenWRT setup script
script="/tmp/uci_setup_script.sh"
echo "#!/bin/sh" > "$script"
echo "uci -q batch << EOI" >> "$script"
for section in $(uci show | awk -F. '{print $1}' | sort -u); do
uci show "$section" | awk -F. '{print "set "$0}' >> "$script"
echo "commit $section" >> "$script"
done
echo "EOI" >> "$script"
chmod 755 "$script"

如果您将映像生成器用于自定义固件,请为files/etc/uci-defaults映像生成器目录中的文件夹创建一个文件。

#!/bin/sh
# Create OpenWRT uci-defaults file for image builder
# copy generated file to 'files/etc/uci-defaults/' folder in your image builder directory
script="/tmp/99-custom"
echo "#!/bin/sh" > "$script"
echo "uci -q batch << EOI" >> "$script"
for section in $(uci show | awk -F. '{print $1}' | sort -u); do
uci show "$section" | awk -F. '{print "set "$0}' >> "$script"
echo "commit $section" >> "$script"
echo "EOI" >> "$script"
chmod 755 "$script"
done

答案2

嗯...刚刚发现我需要使用uci show而不是uci get,请参阅下面的示例:

root@OpenWrt:/etc/config# uci show firewall.@rule[0]
firewall.cfg0592bd=rule
firewall.cfg0592bd.name='Allow-DHCP-Renew'
firewall.cfg0592bd.src='wan'
firewall.cfg0592bd.proto='udp'
firewall.cfg0592bd.dest_port='68'
firewall.cfg0592bd.target='ACCEPT'
firewall.cfg0592bd.family='ipv4'
root@OpenWrt:/etc/config#

相关内容