1

我正在编写一个接受命令行参数的 Bash 脚本,但不是一次一个,而是一次所有的,使用 case 语句。

到目前为止,这是我的代码

while [ $# -gt 0 ]
do
    case "$1" in
      -n|--name)
          name="$2"
      ;;
      -s|--size)
          size="$2"
      ;;
      -l|--location)
          location="$2"
      ;;
    esac
done

此代码一次只接受一个,我需要它能够指定任意数量的代码。

4

1 回答 1

5

使用时,getopt您可以按如下方式解决您的任务:

OPTS=`getopt -o n:s:l: --long name:,size:,location: -- "$@"`
eval set -- "$OPTS"

这将原始位置参数拆分为选项(接受参数,用冒号表示)和剩余参数,这两个参数都可能被引用。之后计算结果getopt并将set -- $OPTS位置参数$1, $2, $3, ... 设置为getopt获得的值。之后,我们可以遍历位置参数(并在遇到--将选项与脚本的剩余参数分开时立即停止)。

while true
do
  case "$1" in
    -n|--name)
      name="$2"
      shift 2
      ;;
    -s|--size)
      size="$2"
      shift 2
      ;;
    -l|--location)
      location="$2"
      shift 2
      ;;
    --)
      shift
      break
      ;;
     *)
      echo "Internal error!"
      exit 1
  esac
done

echo -e "name: $name\nsize: $size\nlocation: $location"
于 2013-04-30T01:59:28.983 回答