ima*_*453 3 linux unix bash shell-script
我需要在我的 bash 脚本中检查用户提供的选项,但在调用脚本时并不总是提供这些选项。例如,可能的选项可以是 -dontbuild -donttest -dontupdate 的任意组合,有没有办法检查它们?对不起,如果这个问题真的很基础,我是 bash 脚本的新手。
谢谢
编辑:我尝试了这段代码,并使用选项 -disableVenusBld 调用了脚本,但它仍然打印出“开始构建”。难道我做错了什么?提前致谢!
while [ $# -ne 0 ]
do
arg="$1"
case "$arg" in
-disableVenusBld)
disableVenusBld=true
;;
-disableCopperBld)
disableCopperBld=true
;;
-disableTest)
disableTest=true
;;
-disableUpdate)
disableUpdate=true
;;
*)
nothing="true"
;;
esac
shift
done
if [ "$disableVenusBld" != true ]; then
echo "Starting build"
fi
Run Code Online (Sandbox Code Playgroud)
for arg
do
case "$arg" in
-dontbuild)
do_something
;;
-donttest)
do_something
;;
-dontupdate)
do_something
;;
*)
echo "Unknown argument"
exit 1
;;
esac
done
Run Code Online (Sandbox Code Playgroud)
Wheredo_something
表示设置标志或实际做某事。请注意,for arg
隐式迭代$@
(位置参数数组)并等效于显式for arg in $@
.
另请注意,Bash 有一个内置函数,getopts
但它只需要简短的选项(例如-x
)。还有一个名为的外部实用程序getopt
,它确实需要很长时间的选择,但它有几个缺陷,不推荐使用。
options=":es:w:d:"
OLDOPTIND=$OPTIND
while getopts $options option
do
case $option in
e ) do_something;;
w ) do_something $OPTARG;;
d ) foo=$OPTARG;;
q ) do_something;;
s ) case $OPTARG in
m | M ) bar="abc";;
s | S ) baz="def";;
* ) echo "Invalid option for blah blah" 1>&2; exit;;
esac;;
* ) echo "Unimplemented option chosen.";; # DEFAULT
esac
OLDOPTIND=$OPTIND
done
Run Code Online (Sandbox Code Playgroud)
归档时间: |
|
查看次数: |
5993 次 |
最近记录: |