1

コマンド ライン引数を受け入れる Bash スクリプトを作成していますが、一度に 1 つだけではなく、case ステートメントを使用して一度にすべての引数を受け入れます。

これまでの私のコードは次のとおりです

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

このコードは一度に 1 つしか受け付けません。必要なだけ指定できるようにする必要があります。

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 に答える