mirror of
				git://git.openwrt.org/openwrt/openwrt.git
				synced 2025-10-31 14:04:26 -04:00 
			
		
		
		
	
		
			
				
	
	
		
			190 lines
		
	
	
		
			3.7 KiB
		
	
	
	
		
			Bash
		
	
	
		
			Executable File
		
	
	
	
	
			
		
		
	
	
			190 lines
		
	
	
		
			3.7 KiB
		
	
	
	
		
			Bash
		
	
	
		
			Executable File
		
	
	
	
	
| #!/bin/sh
 | |
| # Shell script for interacting with config files
 | |
| #
 | |
| # Copyright (C) 2006        Fokus Fraunhofer <carsten.tittel@fokus.fraunhofer.de>
 | |
| # Copyright (C) 2006,2007	Felix Fietkau <nbd@openwrt.org>
 | |
| #
 | |
| # This program is free software; you can redistribute it and/or modify
 | |
| # it under the terms of the GNU General Public License as published by
 | |
| # the Free Software Foundation; either version 2 of the License, or
 | |
| # (at your option) any later version.
 | |
| #
 | |
| # This program is distributed in the hope that it will be useful,
 | |
| # but WITHOUT ANY WARRANTY; without even the implied warranty of
 | |
| # MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
 | |
| # General Public License for more details.
 | |
| #
 | |
| # You should have received a copy of the GNU General Public License
 | |
| # along with this program; if not, write to the Free Software
 | |
| # Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA
 | |
| 
 | |
| . $UCI_ROOT/etc/functions.sh
 | |
| include $UCI_ROOT/lib/config
 | |
| 
 | |
| SEP="[^0-9A-Za-z_]"
 | |
| 
 | |
| do_get() {
 | |
| 	local PACKAGE
 | |
| 	local CONFIG
 | |
| 	local OPTION
 | |
| 	local DUMMY
 | |
| 
 | |
| 	strtok "$*" PACKAGE . CONFIG . OPTION $SEP DUMMY
 | |
| 
 | |
| 	[ $? -ne 3 ] && {
 | |
| 		uci_usage get
 | |
| 		exit 1
 | |
| 	}
 | |
| 
 | |
| 	uci_load "$PACKAGE"
 | |
| 	config_get "$CONFIG" "$OPTION"
 | |
| }
 | |
| 
 | |
| do_set() {
 | |
| 	local PACKAGE
 | |
| 	local CONFIG
 | |
| 	local OPTION
 | |
| 	local VALUE
 | |
| 
 | |
| 	strtok "$1" PACKAGE . CONFIG = VALUE
 | |
| 	[ $? -ne 3 ] && {
 | |
| 		uci_usage set
 | |
| 		exit 1
 | |
| 	}
 | |
| 	
 | |
| 	strtok "$CONFIG" CONFIG . OPTION
 | |
| 	
 | |
| 	if [ $? -eq 1 ]; then
 | |
| 		uci_add "$PACKAGE" "$VALUE" "$CONFIG"
 | |
| 	else
 | |
| 		uci_set "$PACKAGE" "$CONFIG" "$OPTION" "$VALUE"
 | |
| 	fi
 | |
| }
 | |
| 
 | |
| do_rename() {
 | |
| 	[ $# -ne 3 ] && {
 | |
| 		uci_usage rename
 | |
| 		exit 1
 | |
| 	}
 | |
| 	uci_rename "$@"
 | |
| }
 | |
| 
 | |
| do_remove() {
 | |
| 	local PACKAGE
 | |
| 	local CONFIG
 | |
| 	local OPTION
 | |
| 	local DUMMY
 | |
| 
 | |
| 	strtok "$*" PACKAGE . CONFIG . OPTION $SEP DUMMY
 | |
| 	[ $? -ne 3 -a $? -ne 2 ] && {
 | |
| 		uci_usage rename
 | |
| 		exit 1
 | |
| 	}
 | |
| 	uci_remove "$PACKAGE" "$CONFIG" ${OPTION:+"$OPTION"}
 | |
| }
 | |
| 
 | |
| do_commit() {
 | |
| 	local PACKAGE="$1"
 | |
| 	for package in ${PACKAGE:-$(cd /tmp/.uci; ls)}; do 
 | |
| 		uci_commit "$package"
 | |
| 	done
 | |
| }
 | |
| 
 | |
| do_show() {
 | |
| 	local PACKAGE
 | |
| 	local CONFIG
 | |
| 	local DUMMY
 | |
| 
 | |
| 	strtok "$*" PACKAGE . CONFIG $SEP DUMMY
 | |
| 	[ $? -gt 2 ] && {
 | |
| 		uci_usage show
 | |
| 		exit 1
 | |
| 	}
 | |
| 	
 | |
| 	for package in ${PACKAGE:-$(cd $UCI_ROOT/etc/config; ls)}; do
 | |
| 		SECTION=""
 | |
| 	
 | |
| 		config_cb() {
 | |
| 			if [ -z "$CONFIG" -o "$CONFIG" = "$2" ]; then
 | |
| 				append SECTION "$2"
 | |
| 				option_cb() {
 | |
| 					append "${CONFIG_SECTION}_VARS" "$1"
 | |
| 				}
 | |
| 			else
 | |
| 				option_cb() {
 | |
| 					return 0
 | |
| 				}
 | |
| 			fi
 | |
| 		}
 | |
| 			
 | |
| 		uci_load "$package"
 | |
| 	
 | |
| 		for section in $SECTION; do
 | |
| 			config_get type "$section" TYPE
 | |
| 			[ -z "$type" ] && continue
 | |
| 			echo "$package.$section=$type"
 | |
| 			eval "VARS=\"\${${section}_VARS}\""
 | |
| 			for var in $VARS; do
 | |
| 				config_get val "$section" "$var"
 | |
| 				[ -n "$val" ] && {
 | |
| 					echo "$package.$section.$var=$val"
 | |
| 					config_set "$section" "$var" ""
 | |
| 				}
 | |
| 			done
 | |
| 			config_set "$section" TYPE ""
 | |
| 		done
 | |
| 	done
 | |
| }
 | |
| 
 | |
| do_validate() {
 | |
| 	[ "$#" -ne 1 ] && {
 | |
| 		uci_usage validate
 | |
| 		exit 1
 | |
| 	}
 | |
| 	uci_validate "$1" || exit "$?"
 | |
| }
 | |
| 
 | |
| uci_usage() {
 | |
| 	case "$1" in
 | |
| 		show) echo "$0 show [<package>[.<config>]]";;
 | |
| 		get) echo "$0 get <package>.<config>.<option>";;
 | |
| 		set) echo "$0 set <package>.<config>[.<option>]=<value>";;
 | |
| 		del) echo "$0 del <package>.<config>[.<option>]";;
 | |
| 		rename) echo "$0 rename <package> <config> <name>";;
 | |
| 		commit) echo "$0 commit [<package> ... ]";;
 | |
| 		validate) echo "$0 validate <package>";;
 | |
| 		*) 
 | |
| 			echo "Syntax: $0 <command> <arguments...>"
 | |
| 			echo
 | |
| 			uci_usage show
 | |
| 			uci_usage get
 | |
| 			uci_usage set
 | |
| 			uci_usage del
 | |
| 			uci_usage rename
 | |
| 			uci_usage commit
 | |
| 			uci_usage validate 
 | |
| 			echo
 | |
| 			exit 1
 | |
| 		;;
 | |
| 	esac
 | |
| }
 | |
| 
 | |
| if [ $# -eq 0 ] ; then
 | |
| 	uci_usage
 | |
| 	exit 0
 | |
| fi
 | |
| 
 | |
| CMD="$1"
 | |
| shift
 | |
| case "$CMD" in
 | |
| 	set) do_set "$@";;
 | |
| 	del) do_remove "$@";;
 | |
| 	rename) do_rename "$@";;
 | |
| 	get) do_get "$@";;
 | |
| 	show) do_show "$@";;
 | |
| 	commit) do_commit "$@";;
 | |
| 	validate) do_validate "$@";;
 | |
| 	*) uci_usage;;
 | |
| esac
 | |
| exit 0
 |