检查作为输入提供给 shell 脚本的可变数量的位置参数的有效性
Check the validity of variable number of positional parameters provided as input to a shell script
为了为多个平台编译一组应用程序,需要设置某些构建导出。
示例命令如下:
source exports_file.sh <plaforms> <feature1> <feature2> <feature3>
这里的位置参数<platform>
是强制性的,而其他参数如<feature1>, <feature2>, <feature3>
是可选的。只有在构建中需要相应的功能时才必须启用这些功能。
有效的命令行选项集是:
source exports_file.sh <plaforms> <feature1> <feature2> <feature3>
source exports_file.sh <plaforms> <feature1> <feature2>
source exports_file.sh <plaforms> <feature1>
source exports_file.sh <plaforms>
需要注意的重要一点是脚本应该 return 在以下情况下出错:
1) <platform>
用户未提供输入参数。
2) <platform>
输入参数的值不在列表中,即它不是 1234、1235 或 1236。
3) 除了 <feature1>, <feature2>, <feature3>
之外的任何其他特征都作为输入提供。
我编写了一个运行良好的脚本,但我不确定它是否正确检查了所有输入参数的有效性。
$> cat exports_file.sh
if [ $# -gt 0 ]; then
platform=
# 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`
有没有更好的方法来编写这个脚本。最重要的是确保所有输入参数的有效性。
if [ $# -gt 0 ]; then
platform=
# 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
case
语句将简化您的代码。不过,首先,当你发现错误时尽快退出,这样你剩下的代码就不需要缩进了。
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=
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
为了为多个平台编译一组应用程序,需要设置某些构建导出。
示例命令如下:
source exports_file.sh <plaforms> <feature1> <feature2> <feature3>
这里的位置参数<platform>
是强制性的,而其他参数如<feature1>, <feature2>, <feature3>
是可选的。只有在构建中需要相应的功能时才必须启用这些功能。
有效的命令行选项集是:
source exports_file.sh <plaforms> <feature1> <feature2> <feature3>
source exports_file.sh <plaforms> <feature1> <feature2>
source exports_file.sh <plaforms> <feature1>
source exports_file.sh <plaforms>
需要注意的重要一点是脚本应该 return 在以下情况下出错:
1) <platform>
用户未提供输入参数。
2) <platform>
输入参数的值不在列表中,即它不是 1234、1235 或 1236。
3) 除了 <feature1>, <feature2>, <feature3>
之外的任何其他特征都作为输入提供。
我编写了一个运行良好的脚本,但我不确定它是否正确检查了所有输入参数的有效性。
$> cat exports_file.sh
if [ $# -gt 0 ]; then
platform=
# 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`
有没有更好的方法来编写这个脚本。最重要的是确保所有输入参数的有效性。
if [ $# -gt 0 ]; then
platform=
# 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
case
语句将简化您的代码。不过,首先,当你发现错误时尽快退出,这样你剩下的代码就不需要缩进了。
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=
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