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