All pastes #251324 Raw Edit

Mine

public text v1 · immutable
#251324 ·published 2006-11-18 00:42 UTC
rendered paste body
#!/bin/sh
# Shell script for interacting with config files
#
# Copyright (C) 2006 by Fokus Fraunhofer <carsten.tittel@fokus.fraunhofer.de>
# Copyright (C) 2006 by 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

. /etc/functions.sh
include /lib/config

do_get() {
        local PACKAGE="${1%%.*}"; set "${1#*.}";
        local  CONFIG="${1%%.*}"; set "${1#*.}";
        local  OPTION="$1";

        uci_load "$PACKAGE"
        config_get "$CONFIG" "$OPTION"
}

do_set() {
        local PACKAGE="${1%%.*}"; set "${1#*.}";
        local  CONFIG="${1%%.*}"; set "${1#*.}";
        local  OPTION="${1%%=*}"; set "${1#*=}";
        local  VALUE="$1";

        uci_set "$PACKAGE" "$CONFIG" "$OPTION" "$VALUE"
}

do_add() {
        [ $# -ne 3 ] && {
                uci_usage add
                exit 1
        }
        uci_add "$@"
}

do_rename() {
        [ $# -ne 3 ] && {
                uci_usage rename
                exit 1
        }
        uci_rename "$@"
}

do_remove() {
        [ $# -ne 3 -a $# -ne 2 ] && {
                uci_usage rename
                exit 1
        }
        uci_remove "$@"
}

do_commit() {
        [ $# -ne 1 ] && {
                uci_usage commit
                exit 1
        }
        uci_commit "$1"
}

do_show() {
        set "$1."
        local PACKAGE="${1%%.*}"; set "${1#*.}"
        local  CONFIG="${1%%.*}"; set "${1#*.}"

        [ ! -z "$1" ] && {
                uci_usage show
                exit 1
        }

        PACKAGE=${PACKAGE:-$(cd /etc/config; ls)}

        for package in $PACKAGE; 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
}

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>";;
                add) echo "$0 add <package> <type> <config>";;
                del) echo "$0 del <package> <config> [<option>]";;
                rename) echo "$0 rename <package> <config> <name>";;
                commit) echo "$0 commit <package>";;
                *)
                        echo "Syntax: $0 <command> <arguments...>"
                        echo
                        uci_usage show
                        uci_usage get
                        uci_usage set
                        uci_usage add
                        uci_usage del
                        uci_usage rename
                        uci_usage commit
                        echo
                        exit 1
                ;;
        esac
}

if [ $# -eq 0 ] ; then
        uci_usage
        exit 0
fi
CMD="$1"
shift
case "$CMD" in
        set) do_set "$@";;
        add) do_add "$@";;
        del) do_remove "$@";;
        rename) do_rename "$@";;
        get) do_get "$@";;
        show) do_show "$@";;
        commit) do_commit "$@";;
        *) uci_usage;;
esac
exit 0