Bash:如果然后声明多个条件

Gre*_*reg 2 bash if-statement

我正在编写一个bash脚本来设置不同类型的恢复.我正在设置一个"if"语句来比较多个变量.

restore=$1
if [ "$restore" != "--file" ] || [ "$restore" != "--vhd"] || [ "$restore" != "--vm" ]
then
    echo "Invalid restore type entered"
    exit 1
fi
Run Code Online (Sandbox Code Playgroud)

我正在寻找的是看看是否有更简单的方法将所有这些条件放在一组括号中,就像在Python中一样.在Python中我可以像这样运行它:

import sys
restore = sys.argv[1]
if restore not in ("--file", "--vhd", "--vm"):
    sys.exit("Invalid restore type entered")
Run Code Online (Sandbox Code Playgroud)

所以基本上,有一个bash替代品吗?

Adr*_*rth 8

使用便携式(POSIX)解决方案的开关:

case ${restore} in
    --file|--vhd|--vm)
        ;;
    *)
        echo "Invalid restore type entered"
        exit 1
        ;;
esac
Run Code Online (Sandbox Code Playgroud)

甚至

case ${restore#--} in
    file|vhd|vm)
        ;;
    *)
        echo "Invalid restore type entered"
        exit 1
        ;;
esac
Run Code Online (Sandbox Code Playgroud)