如何在bash中首先使用长可选或非可选参数的任意随机顺序使用getopts?

时间:2018-03-29 14:39:01

标签: linux bash shell centos

我有一个类似

的脚本
./sample.sh --add employeename -f firstname -a age -d detail
./sample.sh --add employeename  -a age -d detail -f firstname
./sample.sh --add employeename -d detail -f firstname
./sample.sh --del employeename
./sample.sh --update employeename -f firstname [age,detail are optional]

在这里,我如何使用getopts -add, - del, - update,我不想使用getopt。好的建议将不胜感激。

1 个答案:

答案 0 :(得分:2)

这些是真正的命令,而不是选项,所以应该是常规的位置参数:

./sample.sh add employeename -f firstname -a age -d detail
./sample.sh add employeename  -a age -d detail -f firstname
./sample.sh add employeename -d detail -f firstname
./sample.sh del employeename
./sample.sh update employeename -f firstname [age,detail are optional]

应该是第一位的;然后可以使用特定于命令的选项集解析剩余的选项。

cmd=$1
shift
case $cmd in
  add) do_add "$@" ;;
  del) do_del "$@" ;;
  update) do_update "$@" ;; 
  *) echo "Unrecognized command: $cmd"
     exit 1
     ;;
esac

do_add () {
    name=$1
    shift
    while getopts "f:a:d:" opt "$@"; do
      ...
    done
    ...
}

do_del () {
    ...
}

# etc