Применение getopt в Linux
getopt
#!/bin/bash
#getopt [getopt_options] [--] optstring parameters
#getopt_options описывают как разделять аргументы ( одно тире -l или два тире для коротких вариантов опций getopt -l "name:,version::,verbose" -- "n:v::V" )
#опции getop могут иметь значение или не иметь значения
# : Двоеточие после опции означает, что для опции требуется аргумент
# :: Двойное двоеточие означает, что для опции требуется необязательные аргумент, между опцией и значением не должно быть пробела -t123
#$OPTSTRING - список аргументов
#$OPTARG содержит значение текущего аргумента
while getopts ":s:u:t:n:l:h" opt; do
case "$opt" in
s ) echo "$OPTARG"
;;
u ) echo "$OPTARG"
;;
t ) echo "$OPTARG"
;;
n ) echo "$OPTARG"
;;
l ) echo "$OPTSTRING"
;;
h ) echo "HELP"
;;
* ) echo "HELP"
;;
esac
done
getopts
getopts - инструмент для разбора аргументов. Это встроенная команда Bash, но имеется и ее "внешний" аналог /usr/bin/getopt
С командой getopts очень тесно взаимосвязаны скрытые переменные. $OPTIND -- указатель на аргумент (OPTion INDex) и $OPTARG (OPTion ARGument) -- дополнительный аргумент опции. Символ двоеточия, следующий за именем опции, указывает на то, что она имеет дополнительный аргумент. Обычно getopts упаковывается в цикл while, в каждом проходе цикла извлекается очередная опция и ее аргумент (если он имеется), обрабатывается, затем уменьшается на 1 скрытая переменная $OPTIND и выполняется переход к началу новой итерации
Команда getopts парсит короткие опции, которые начинаются с одного дефиса (-), за которым идет буква или цифра. Примеры коротких опций: -2, -d и -D. Она также может парсить комбинации коротких опций, например -2dD (это то же самое, как три одновременно указанные опции -2, -d и -D).
Предположим, что вам нужно для опций -a и -Z обрабатывать аргументы. Для этого после символа опций указывают двоеточие (:), например:
getopts "a:pZ:" optname
Начальное объявление:
while getops ":abcde:fg" Option
a, b, c, d, e, f, g -- это возможные опции (ключи)
Символ : после опции 'e' указывает на то, что с данной опцией может идти дополнительный аргумент
do
case $Option in
a ) # Действия, предусмотренные опцией 'a'.
b ) # Действия, предусмотренные опцией 'b'.
...
e) # Действия, предусмотренные опцией 'e', а так же необходимо обработать $OPTARG,
# в которой находится дополнительный аргумент этой опции.
...
g ) # Действия, предусмотренные опцией 'g'.
esac
done
shift $(($OPTIND - 1))
# Перейти к следующей опции.
#!/bin/bash
while getopts ":abc:fg" options;
do
case ${options} in
a ) echo "Опция a отработала"
;;
b ) echo "Опция b отработала"
;;
c ) ls -la ${OPTARG}; echo "Опция c отработала"
;;
esac
done
./test.sh -ab -c test.sh
Опция a отработала
Опция b отработала
-rwxrwxr-x 1 chich chich 258 авг 26 12:02 test.sh
Опция c отработала
Источники
Связанные темы
Использование команды tee в Linux
Использование wget и curl в Linux
Команда chattr и lsattr в Linux
Использование awk Linux Alpine
Блокировка пользователя в Linux
Проверка на необходимость перезапуска после обновления пакетов
Стандартные потоки и перенаправление ввода/вывода в Linux
Архивирование и сжатие файлов в Linux
Полезные команды и скрипты Linux
Условная конструкция if в Linux
Использование оператора select в языке shell
Внутренние и внешние команды linux
Использование конструкции case в Linux