我在脚本中有 5 个选项,例如获取 IP 地址、可用内存、CPU 使用率、主机名和用户名。
我想编写一个脚本来获取所有输出或任何人的输出。
例如 :
如果我执行
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
我以前从未这样做过,但看到这个后我学到了一些东西。您将需要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
标志不需要值,则 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
http://aplawrence.com/Unix/getopts.html