带有非选项和选项参数的脚本

J33nn

我正在尝试处理bash脚本的可选参数和必需参数。我有以下脚本:

while getopts "a:x:" opt; do
  case $opt in
     a) echo "option a set: $OPTARG" ;;
     x) echo "option x set: $OPTARG" ;;
     \?) echo "Invalid option: -$OPTARG" >&2; exit 1;;
esac
done
shift $((OPTIND-1))

echo "mandatory argument $1"
echo "mandatory argument2 $2"

当我使用以下命令运行脚本时,一切看起来都正常:

./script.sh -a optionA -x optionX mandatory1 mandatory2

但是,当我混合使用这些参数时:

./script.sh mandatory1 mandatory2 -a optionA -x optionX

它不是...如何使它适用于所有参数组合?

阿姆斯

我认为,您可以在两种说法之间进行迭代。

我认为这可以满足您的要求,并允许您使用它--来防止将以下参数解释为选项。

mandatory=()
while [ $# -gt 0 ] && [ "$1" != "--" ]; do
  while getopts "a:x:" opt; do
    case $opt in
       a) echo "option a set: $OPTARG" ;;
       x) echo "option x set: $OPTARG" ;;
       \?) echo "Invalid option: -$OPTARG" >&2; exit 1;;
  esac
  done
  shift $((OPTIND-1))

  while [ $# -gt 0 ] && ! [[ "$1" =~ ^- ]]; do
    mandatory=("${mandatory[@]}" "$1")
    shift
  done
done

if [ "$1" == "--" ]; then
  shift
  mandatory=("${mandatory[@]}" "$@")
fi

echo "mandatory argument ${mandatory[0]}"
echo "mandatory argument2 ${mandatory[1]}"

基本上,这个想法是使用getopt使用所有选项,然后手动使用所有非选项,然后再次使用getopt寻找更多选项。

本文收集自互联网,转载请注明来源。

如有侵权,请联系 [email protected] 删除。

编辑于
0

我来说两句

0 条评论
登录 后参与评论

相关文章