如何绕过bash中以下参数的可选参数?
Posted
技术标签:
【中文标题】如何绕过bash中以下参数的可选参数?【英文标题】:How to bypass an optional argument for the following argument in bash? 【发布时间】:2015-09-20 12:32:50 【问题描述】:TABLE=`echo "$1" | tr '[:upper:]' '[:lower:]'`
if [ $1 = -d ]
then TABLE=daminundation
elif [ $1 = -b ]
then TABLE=burnscararea
elif [ $1 = -r ]
then TABLE=riverpointinundation
elif [ $1 = " " ]
then echo "User must input -d (daminundation), -b (burnscararea)
or -r (riverpointinundation)."
fi
SHAPEFILEPATH=$2
MERGEDFILENAME=$3
if [ -z $3 ] ;
then MERGEDFILENAME=merged.shp
else
MERGEDFILENAME=$3
fi
COLUMNNAME=$4
if [ -n $4 ]
then COLUMNNAME=$4
fi
$3 & $4 是可选参数。但是,如果我选择不使用 $3 但我想使用 $4,它会将命令读取为 $3。被其他方法弄糊涂了,我应该怎么做才能让下一个不需要的可选命令绕过?
【问题讨论】:
./your_script.sh param_1 param_2 "" param_4
你在找getopts
@LucM 第一个选项适用于简单的解决方案,getopts 似乎是更有条理的解决方案。谢谢。
【参考方案1】:
你可能想要这个:
#!/bin/bash
while getopts ":b :d :r" opt; do
case $opt in
b)
TABLE=burnscararea
;;
d)
TABLE=daminundation
;;
r)
TABLE=riverpointinundation
;;
\?)
echo "Invalid option: -$OPTARG" >&2
exit 1
;;
esac
done
shift $((OPTIND-1))
[ -z "$TABLE" ] && ( echo "At least one of -b/-d/-r options must be provided"; exit 1; )
[ $# -ne 3 ] && ( echo "3 params expected!"; exit 1; )
SHAPEFILEPATH="$2"
MERGEDFILENAME="$3"
COLUMNNAME="$4"
# other stuff
【讨论】:
虽然这没有解决第三个和第四个参数,只是表的第一个参数,但它确实为我需要的解决方案提供了一个工作模板。欣赏!以上是关于如何绕过bash中以下参数的可选参数?的主要内容,如果未能解决你的问题,请参考以下文章
如何在 argparse 中使用带有 nargs='*' 参数的可选位置参数?