обработка аргументов с помощью getopts в конце строки
Бывает так, что нужно создать скрипт, при вызове которого дополнительные аргументы командной строки должны идти в конце. Например, чтобы
$ ./script action -o a -p -t argumentвыполнял действие action, при этом обрабатывая аргументы -o -p -t, но при
$ ./script -o a -p -t action argumentвыводил справку по использованию. (По такому принципу работает ряд утилит; в частности - многие распределённые системы контроля версий - git, mercurial, bazaar и т.п.)
Традиционно, для обработки аргументов используется утилита getopts; в Сети также можно без проблем найти множество примеров её использования.
Приблизительный пример же того, что нужно нам:
#!/bin/bash #... USAGE="script <action> <options> [file | directory]"; case "$1" in #обрабатываем действие, которое предусмотренно скриптом action1 | action2 ) action="$1" ;; #в противном случае выводим справку по использованию * ) echo "$USAGE"; exit 0 ;; esac shift $(($OPTIND)); #пропускаем обработанный первый аргумент while getopts o:pt option; do #обработка допустимых опций case $option in o ) case "$OPTARG" in #обработка значений аргумента -o a ) o_option="$OPTARG";; b ) o_option="$OPTARG";; * ) echo "Доступные значения для опции -o: a,b"; exit 0 ;; esac;; p ) p_option="true" ;; t ) t_option="true" ;; * ) echo "$USAGE"; exit 0 ;; esac done shift $(($OPTIND-1)); #пропуск всех обработанных опций и аргументов #теперь "$1" содержит основной аргумент, а все опции и команды считаются обработанными if [ "$1" == "$NULL" ]; then echo "$USAGE"; fi; #тело скрипта #...
Проверяем:
$ ./script.sh action1 -po a file $ ./script.sh action file script <action> <options> [file | directory] $ ./script.sh action1 -o 1 file Доступные значения для опции -o: a,b $ ./script.sh: option requires an argument -- o script <action> <options> [file | directory] $
Ну и так далее.
За дополнительной информацией просьба обращаться в google.
- 3593 просмотра
Страница для печати


Отправить комментарий