Linux 检查作为shell脚本输入提供的可变数量的位置参数的有效性

Linux 检查作为shell脚本输入提供的可变数量的位置参数的有效性,linux,bash,shell,sh,Linux,Bash,Shell,Sh,要为多个平台编译一组应用程序,需要设置某些生成导出 示例命令如下所示: source exports\u file.sh 此处位置参数是必需的,而其他参数如,是可选的。只有在构建中需要相应的功能时,才必须启用这些功能 有效的命令行选项集包括: source exports\u file.sh source exports_file.sh source exports_file.sh source exports_file.sh 需要注意的重要一点是,如果出现以下情况,脚本应返回错误: 1) 用户

要为多个平台编译一组应用程序,需要设置某些生成导出

示例命令如下所示:

source exports\u file.sh

此处位置参数
是必需的,而其他参数如
是可选的。只有在构建中需要相应的功能时,才必须启用这些功能

有效的命令行选项集包括:

source exports\u file.sh
source exports_file.sh
source exports_file.sh
source exports_file.sh

需要注意的重要一点是,如果出现以下情况,脚本应返回错误:

1)
用户未提供输入参数

2) 列表中不存在
输入参数的值,即它不是1234、1235或1236

3) 除了
以外的任何其他功能都作为输入提供

我已经写了一个脚本,它工作得很好,但是我不确定它是否正确地检查了所有输入参数的有效性

   $> cat exports_file.sh


    if [ $# -gt 0 ]; then

    platform=$1

    # Common exports
    unset PLATFORM
    unset ENABLE_FEATURE_1
    unset ENABLE_FEATURE_2
    unset ENABLE_FEATURE_3

    echo "INFO: Setting common exports for $platform"
    if [ $platform == "1234" ]
    then
        export PLATFORM=91234

    elif [ $platform == "1235" ]
    then
        export PLATFORM=91235

    elif [ $platform == "1236" ]
    then
        export PLATFORM=91236

    else
        echo "ERROR: Exports are not defined for $platform."
        exit 1
    fi

    # Check for feature based exports <feature1> <feature2> <feature3>
    for var in "$@"
    do
        if [ $var == "arg2" ]
        then
            export ENABLE_FEATURE_1=Y

        elif [ $var == "arg3" ]
        then
            export ENABLE_FEATURE_2=Y

        elif [ $var == "arg4" ]
        then
            export ENABLE_FEATURE_3=Y
        else
            echo "ERROR: unrecognised argument '$var'";
            exit 1
        fi
    done
else
    echo "ERROR: No inputs parameters provided to the scripts."
    echo "Usage: source exports_file.sh <plaforms> <feature1> <feature2> <feature3>"
fi`
$>cat exports\u file.sh
如果[$#-gt 0];然后
月台=$1
#共同出口
未设置平台
取消设置启用功能\u 1
取消设置启用功能\u 2
取消设置启用功能\u 3
echo“信息:设置$platform的通用导出”
如果[$platform==“1234”]
然后
导出平台=91234
elif[$platform==“1235”]
然后
导出平台=91235
elif[$platform==“1236”]
然后
导出平台=91236
其他的
echo“错误:未为$platform定义导出。”
出口1
fi
#检查基于功能的导出
对于“$@”中的变量
做
如果[$var==“arg2”]
然后
导出启用功能\u 1=Y
elif[$var==“arg3”]
然后
导出启用\u功能\u 2=Y
elif[$var==“arg4”]
然后
导出启用功能\u 3=Y
其他的
echo“错误:无法识别的参数“$var”;
出口1
fi
完成
其他的
echo“错误:没有为脚本提供输入参数。”
echo“用法:源导出_file.sh”
fi`
有没有更好的方法来编写这个脚本。最重要的是确保所有输入参数的有效性

if[$#-gt 0];然后
  if [ $# -gt 0 ]; then

    platform=$1

    # Common exports
    unset PLATFORM
    unset ENABLE_FEATURE_1
    unset ENABLE_FEATURE_2
    unset ENABLE_FEATURE_3
    echo  input parameter: $@

    echo "INFO: Setting common exports for $platform"
    if [ $platform == "1234" ]
    then
        export PLATFORM=91234
        export ENABLE_FEATURE_1=Y
        # Result
        echo $PLATFORM
        echo $ENABLE_FEATURE_1

    elif [ $platform == "1235" ]
    then
        export PLATFORM=91235
        export ENABLE_FEATURE_2=Y
        # Result
        echo $PLATFORM
        echo $ENABLE_FEATURE_2

    elif [ $platform == "1236" ]
    then
        export PLATFORM=91236
        export ENABLE_FEATURE_3=Y
        # Result
        echo $PLATFORM
        echo $ENABLE_FEATURE_3

    else
       echo "ERROR: Exports are not defined for $platform."
        exit 1
    fi
    fi

    # Check for feature based exports <feature1> <feature2> <feature3>
    #for var in "$@"
    #do
        #if [ $var == "arg2" ]
        #then
            #export ENABLE_FEATURE_1=Y

        #elif [ $var == "arg3" ]
        #then
            #export ENABLE_FEATURE_2=Y

        #elif [ $var == "arg4" ]
        #then
            #export ENABLE_FEATURE_3=Y
        #else
            #echo "ERROR: unrecognised argument '$var'";
            #exit 1
        #fi
    #done
#else
   #echo "ERROR: No inputs parameters provided to the scripts."
    #echo "Usage: source exports_file.sh <plaforms> <feature1> <feature2> <feature3>"
#fi
月台=$1 #共同出口 未设置平台 取消设置启用功能\u 1 取消设置启用功能\u 2 取消设置启用功能\u 3 回波输入参数:$@ echo“信息:设置$platform的通用导出” 如果[$platform==“1234”] 然后 导出平台=91234 导出启用功能\u 1=Y #结果 echo$平台 echo$启用功能\u 1 elif[$platform==“1235”] 然后 导出平台=91235 导出启用\u功能\u 2=Y #结果 echo$平台 echo$启用功能\u 2 elif[$platform==“1236”] 然后 导出平台=91236 导出启用功能\u 3=Y #结果 echo$平台 echo$启用功能\u 3 其他的 echo“错误:未为$platform定义导出。” 出口1 fi fi #检查基于功能的导出 #对于“$@”中的变量 #做 #如果[$var==“arg2”] #然后 #导出启用功能\u 1=Y #elif[$var==“arg3”] #然后 #导出启用\u功能\u 2=Y #elif[$var==“arg4”] #然后 #导出启用功能\u 3=Y #否则 #echo“错误:无法识别的参数“$var”; #出口1 #fi #完成 #否则 #echo“错误:没有为脚本提供输入参数。” #echo“用法:源导出_file.sh” #fi
如果[$#-gt 0];然后
月台=$1
#共同出口
未设置平台
取消设置启用功能\u 1
取消设置启用功能\u 2
取消设置启用功能\u 3
回波输入参数:$@
echo“信息:设置$platform的通用导出”
如果[$platform==“1234”]
然后
导出平台=91234
导出启用功能\u 1=Y
#结果
echo$平台
echo$启用功能\u 1
elif[$platform==“1235”]
然后
导出平台=91235
导出启用\u功能\u 2=Y
#结果
echo$平台
echo$启用功能\u 2
elif[$platform==“1236”]
然后
导出平台=91236
导出启用功能\u 3=Y
#结果
echo$平台
echo$启用功能\u 3
其他的
echo“错误:未为$platform定义导出。”
出口1
fi
fi
#检查基于功能的导出
#对于“$@”中的变量
#做
#如果[$var==“arg2”]
#然后
#导出启用功能\u 1=Y
#elif[$var==“arg3”]
#然后
#导出启用\u功能\u 2=Y
#elif[$var==“arg4”]
#然后
#导出启用功能\u 3=Y
#否则
#echo“错误:无法识别的参数“$var”;
#出口1
#fi
#完成
#否则
#echo“错误:没有为脚本提供输入参数。”
#echo“用法:源导出_file.sh”
#fi

案例语句将简化您的代码。不过,首先,当您发现错误时,请尽快退出,这样您的其余代码就不需要缩进

if [ $# = 0 ]; then
    echo "ERROR: No inputs parameters provided to the scripts." >&2
    echo "Usage: source exports_file.sh <plaforms> <feature1> <feature2> <feature3>" >&2
    exit 1
fi

platform=$1
shift

echo "INFO: Setting common exports for $platform" >&2
case $platform in 
    1234|1235|1236) export PLATFORM=9$platform ;;
    *) echo "ERROR: Exports are not defined for $platform" >&2
       exit 1 ;;
esac


# Check for feature based exports <feature1> <feature2> <feature3>
for var in "$@"
do
    case $var in
      arg2) export ENABLE_FEATURE_1=Y ;;
      arg3) export ENABLE_FEATURE_2=Y ;;
      arg4) export ENABLE_FEATURE_3=Y ;;
      *) echo "ERROR: unrecognized argument '$var'" >&2
         exit 1;;
    esac
done
如果[$#=0];然后
echo“错误:没有为脚本提供输入参数。”>&2
echo“用法:源导出\u file.sh”>&2
出口1
fi
月台=$1
转移
echo“信息:设置$platform的通用导出”>&2
案例$platform in
1234 | 1235 | 1236)导出平台=9美元平台;;
*)echo“错误:未为$platform定义导出”>&2
出口1;;
以撒
#检查基于功能的导出
对于“$@”中的变量
做
案例$var in
arg2)导出启用_功能_1=Y;;
arg3)导出启用\u功能