1. ホーム
  2. bash

[解決済み] Bashでフラグ付きの引数を取得する方法

2022-03-16 08:09:43

質問

bashでこのように位置決めされたパラメータを簡単に取得できることは知っています。

$0 または $1

このようにフラグオプションを使って、各パラメータが何に使われるかを指定できるようにしたいのです。

mysql -u user -h host

を取得するのに最適な方法は何ですか? -u param の値と -h param の値は、位置ではなくフラグで指定するのですか?

どのように解決するのですか?

これは私が普段使っているイディオムです。

while test $# -gt 0; do
  case "$1" in
    -h|--help)
      echo "$package - attempt to capture frames"
      echo " "
      echo "$package [options] application [arguments]"
      echo " "
      echo "options:"
      echo "-h, --help                show brief help"
      echo "-a, --action=ACTION       specify an action to use"
      echo "-o, --output-dir=DIR      specify a directory to store output in"
      exit 0
      ;;
    -a)
      shift
      if test $# -gt 0; then
        export PROCESS=$1
      else
        echo "no process specified"
        exit 1
      fi
      shift
      ;;
    --action*)
      export PROCESS=`echo $1 | sed -e 's/^[^=]*=//g'`
      shift
      ;;
    -o)
      shift
      if test $# -gt 0; then
        export OUTPUT=$1
      else
        echo "no output dir specified"
        exit 1
      fi
      shift
      ;;
    --output-dir*)
      export OUTPUT=`echo $1 | sed -e 's/^[^=]*=//g'`
      shift
      ;;
    *)
      break
      ;;
  esac
done

キーポイントは

  • $# は引数の数
  • while ループは与えられたすべての引数を調べ、case 文の中でその値を照合します。
  • shiftは最初の1つを取り去ります。case文の中で複数回shiftすることで、複数の値を取ることができます。