Beg*_*ner -1 command-line bash scripts
我在脚本中有 5 个选项,例如获取 IP 地址、可用内存、CPU 使用率、主机名和用户名。
我想做一个脚本来获取所有输出或任何人。
例如 :
如果我执行
system_info.sh -i ip -fm free -c cpu -h host -u user
Run Code Online (Sandbox Code Playgroud)
或者
system_info.sh -all all
Run Code Online (Sandbox Code Playgroud)
那么它应该给出所有的输出。
如果假设我只想要一个输出,则需要运行相同的脚本
system_info.sh -fm free
system_info.sh -fm free -i ip
Run Code Online (Sandbox Code Playgroud)
我有这个想法,但我不知道如何设置这些选项并在脚本中进行验证。
请建议我如何设置这些选项
我以前从未这样做过,但看到了这个,我学到了一些东西。您将需要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
Run Code Online (Sandbox Code Playgroud)
这是一个 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。
例如:i:f:c:h:u:,optstring 开头的冒号具有完全不同的含义。它允许您处理 optstring 中未表示的标志。在这种情况下,“选项”变量的值设置为“?” 并且“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
Run Code Online (Sandbox Code Playgroud)
用法:
./h.sh -i ip -f free -c cpu -h host -u user
Run Code Online (Sandbox Code Playgroud)
结果:
ip
free
cpu
host
user
Run Code Online (Sandbox Code Playgroud)
来源:
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