"Пишем свой модуль для wilshell, краткое HOWTO"

Tue 25 March 2014

Блок определений:

NAME='default'
AUTHOR='wilful'
DESCRIPTION='An example of module configuration'
USAGE='-a  Первый ключ, флаг запуска
Можно поставить 
    табы или например \n перенос строки
-b  Второй ключ, значение для запуска'
MODULE_DEPENDS=( 'lock' )

    NAME - имя модуля, на основании этой переменной строятся внутренние вызовы к модулю
    AUTHOR - Собственно автор модуля
    DESCRIPTION - Описание модуля (выводится при вызове wilshell без параметров)
    USAGE - Список опций модуля, описание работы модуля (выводится при запуске модуля без параметров)
    MODULE\_DEPENDS - если необходимо использовать функции из других модулей

Блок чтения параметров скрипта:

InitOpts () {
    RUN_FLAG=2#000
    unset OPT_VAL
    while getopts ":am:v" opt; do
        case $opt in
            'a') 
                RUN_FLAG=$((RUN_FLAG+2#001));
            ;;
            'm') 
                OPT_VAL=${OPTARG}
            ;;
            'v') 
                log 3 "[${MODULE}]";
            ;;
            '?'|':'|*) 
                Usage ${MODULE}
                exit 1
            ;;
        esac
    done

Имя функции "InitOpts" обязательное и менять его нельзя. Добавляем нужные аргументы в массив параметров getopts (в данном примере ":am:v" означает, что функция будет ожидать ключ "-m" с аргументами и ключи "-v -a" без аргументов) В следующем блоке запускается обработчик параметров:

case ${RUN_FLAG} in
    '1')
        LockFun "${MODULE}-[$(basename ${SCRIPT_RUN})]";
        TestFunction ${OPT_VAL}
        UnLockFun "${MODULE}-[$(basename ${SCRIPT_RUN})]";
    ;;
    *)
        Usage ${MODULE}
        exit 1
    ;;
esac

На этом этапе осуществляется вызов функций и основная часть функционала модуля, в зависимости от ключей и параметров могут вызываться различные условия оператора case.

В последнем блоке можно добавлять любые функции, которые будут необходимы в операторе case:

TestFunction () {
    : ${1?"Not enough parameters. Usage: $FUNCNAME Parameter"}
    echo ${1:-"This function displays the text"}
}

Пример модуля можно посмотреть тут.

By A. Semenov, Category: shell

Tags: linux / bash / shell / scripts /

Other articles

"Скрипты на все случаи жизни"

Tue 25 February 2014

Хотел просто сделать коллекцию скриптов, которые приходится писать довольно часто, а получился модульный фреймворк для работы с любыми скриптами. В базовый функционал вынесены только функции для работы с логированием, навешиванием lock-файла при необходимости, почтовые рассылки, функции для работы с выводом и прочее.

Сам фреймворк можно найти тут.

Как это работает …

By A. Semenov, Category: linux

Continue reading …
Яндекс.Метрика