Парсинг параметра с опциями при выполнении сценария оболочки

У меня есть 5 опций в сценарии как Получение IP-адреса, Свободной памяти, использования ЦП, Имени хоста и Имени пользователя.

Я хочу сделать один сценарий для получения всего вывода или любого.

Например:

Если я выполняюсь

system_info.sh -i ip -fm free -c cpu -h host -u user

или

system_info.sh -all all

затем это должно дать весь вывод.

Если предполагают, что я хочу только один вывод, должен запустить тот же скрипт как

system_info.sh -fm free
system_info.sh -fm free -i ip

У меня есть идея, но я не знаю, как установить эти опции и проверить в сценарии.

Предложите меня, как установить эти опции

-1
задан 28 September 2017 в 10:02

1 ответ

1125 Я никогда не делал этого раньше, но видел это и чему-то научился. Вам нужно будет использовать функцию bash getopts следующим образом. Это должно указать вам правильное направление:

while getopts i:f:c:h:u: option
do
 case "${option}"
 in
 i) ip=${OPTARG};;
 f) state=${OPTARG};;
 c) cpu=${OPTARG};;
 h) host=$OPTARG;;
 u) user=$OPTARG;;
 esac
done

Это цикл while, который использует функцию getopts и так называемый optstring, в данном случае i:f:c:h:u:, для итерации аргументы. Цикл while проходит по optstring, который содержит флаги, которые можно использовать для передачи аргументов, и присваивает значение аргумента, предоставленное для этого флага, переменной option. Затем оператор case присваивает значение переменной option глобальной переменной, которая может использоваться после прочтения всех аргументов.

Двоеточия в optstring означают, что значения необходимы для соответствующих флагов. В приведенном выше примере за всеми флагами следует двоеточие: i:f:c:h:u:.

Это означает, что все флаги нуждаются в значении. Если, например, не ожидается, что флаги i и u будут иметь значение, строка опций будет i:f:c:h:u.

Двоеточие в начале строки опций, например :i:f:c:h:u:, имеет совершенно другое значение. Это позволяет вам обрабатывать флаги, которые не представлены в строке optstring. В этом случае значение переменной "option" устанавливается в "?" и значение «OPTARG» устанавливается на неожиданный флаг. Позволяет отобразить подходящее сообщение об ошибке, информирующее пользователя об ошибке.

Аргументы, которым не предшествует флаг, игнорируются getopts. Если флаги, указанные в строке опций, не предоставляются при вызове скрипта, ничего не происходит, если вы специально не обработаете этот случай в своем коде.

Любые аргументы, не обработанные getops, все еще могут быть зафиксированы с помощью обычных переменных $1, $2 и т. Д.

Простой пример:

#!/bin/bash

while getopts "i:f:c:h:u:" opt
do
        case $opt in
                i)
                        echo "ip"
                        ;;
                f)
                        echo "free"
                        ;;
                c)
                        echo "cpu"
                        ;;
                h)
                        echo "host"
                        ;;
                u)
                        echo "user"
                        ;;
                *)
                        echo "Nothing to do"
                        ;;
        esac
done

Использование:

./h.sh -i ip -f free -c cpu -h host -u user

Результат:

ip
free
cpu
host
user

Источник:

https: //www.lifewire.com/pass-arguments-to-bash-script-2200571

http://aplawrence.com/Unix/getopts.html

http://mywiki.wooledge.org/BashFAQ/035#getopts

http://mywiki.wooledge.org/ComplexOptionParsing

0
ответ дан 28 September 2017 в 10:02

Другие вопросы по тегам:

Похожие вопросы: