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

У меня есть 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

2 ответа

Я никогда раньше этого не делал, но видел это, и я кое-что узнал. Вам нужно будет использовать функцию 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-statement присваивает значение переменной option глобальной переменной, которая может использоваться после того, как все аргументы были прочитаны.

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

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

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

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

Любые аргументы, которые не обрабатываются 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

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

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

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

5
ответ дан 18 July 2018 в 06:06

Я никогда раньше этого не делал, но видел это, и я кое-что узнал. Вам нужно будет использовать функцию 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-statement присваивает значение переменной option глобальной переменной, которая может использоваться после того, как все аргументы были прочитаны.

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

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

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

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

Любые аргументы, которые не обрабатываются 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

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

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

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

5
ответ дан 24 July 2018 в 18:31
  • 1
    Если вы знаете, что это сработает, то поделитесь PLS – Beginner 28 September 2017 в 09:14
  • 2
    @ user476625 Вы запрашиваете образец кода? – George Udosen 28 September 2017 в 09:15
  • 3
    Да, что бы вы ни говорили, уже прочитали эту ссылку – Beginner 28 September 2017 в 09:17
  • 4
    Спасибо в Advance, все еще пытаюсь, но я не могу получить. если вы действительно делитесь – Beginner 28 September 2017 в 09:19
  • 5
    @ user476625 Если этот ответ не решит ваш вопрос, пожалуйста, отредактируйте и уточните, что именно вам нужно, и что не так с getopts, прекратите спам с комментариями! – dessert 28 September 2017 в 09:35

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

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