Bash 读取命名参数列表

210 阅读1分钟

写 shell 脚本时,如果有多个参数,经常要指定参数名,这样有些参数可以不传,参数多时有名字也更清晰。

Source (run.sh)

#!/usr/bin/env bash

checkargs()
{
  if [ $# -lt 2 ]; then
    echo "parameter required."
    exit 1
  fi
}

branch=
parent=
while (( "$#" )); do # While there are arguments still to be shifted
  case "$1" in
    -b|--branch)
      branch="$2"
      # 参数有值的检查下参数,不然上面 shift 2 会卡住
      checkargs "$@"
      shift 2
      ;;
    -p)
      parent=1
      shift
      ;;
    *)
      break
      ;;
  esac
done
projects=("$@")

Usage

./run.sh -b main aa bb cc
./run.sh --branch main -p aa bb cc
./run.sh -p aa bb cc