Определение параметров флага в bash - PullRequest
1 голос
/ 03 марта 2020

Я написал bash скрипт, в который я включил некоторые записи, чтобы увидеть, что происходит на каждом этапе выполнения.

Теперь я могу разделить эти журналы по информации отладки и информации пользователя (что что-то завершено и др. c.). Поэтому я хотел бы иметь некоторый параметр флага, например --verbose, который я видел в некоторых других функциях bash, чтобы включить полное ведение журнала и использование было похоже на:

some_function --verbose

или

some_function -v

Я называю это параметрами флага и не знаю, как правильно назвать, поэтому не могу найти ничего полезного.

Как определить такие параметры для bash script?

Ответы [ 2 ]

2 голосов
/ 03 марта 2020

Случай лучше подходит для этого

while [[ "$@" ]]; do
    case "$1" in
        -v|--verbose) verbose="true";;
    esac
    shift
done

То же самое можно сделать в функции, но учтите, что в этом случае он будет обрабатывать параметры, переданные в функцию some_function -v.

some_function () {
    while [[ "$@" ]]; do
        case "$1" in
            -v|--verbose) verbose="true";;
        esac
        shift
    done
}
* 1007. * Затем где-нибудь в скрипте вы можете проверить, установлено ли verbose
[[ "$verbose" ]] && echo "verbose mode" || echo "silent mode"
0 голосов
/ 03 марта 2020

На данный момент я использовал обходной путь и принимаю его как обычный позиционный параметр (как $n). Если быть точным, у меня есть список из четырех параметров, поэтому я собираю этот флаг следующим образом:

verbose=$4
if [ ! "$verbose" == "--verbose" ]; then
  verbose=""
fi

Итак, если параметр не соответствует флагу, я оставляю его пустым, и если я хочу его использовать Я просто сравниваю это с пустой строкой.

Хотя у меня есть один большой недостаток: он должен быть на 4-й позиции в списке параметров.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...