bash脚本的多个参数

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)

Den*_*son 6

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)