У меня есть 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
У меня есть идея, но я не знаю, как установить эти опции и проверить в сценарии.
Предложите меня, как установить эти опции
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