web-dev-qa-db-ja.com

Bashのコマンドライン引数

異なる引数を取るbashスクリプトを書きたいです。通常のLinuxコンソールプログラムのように使用する必要があります。

my_bash_script -p 2 -l 5 -t 20

したがって、値2はページと呼ばれる変数に保存され、パラメーターlは長さと呼ばれる変数に保存され、値20は可変時間に保存される必要があります。

これを行う最良の方法は何ですか?

69
Pascal

getoptsビルトインを使用します。
チュートリアルはこちら

_pages=  length=  time=

while getopts p:l:t: opt; do
  case $opt in
  p)
      pages=$OPTARG
      ;;
  l)
      length=$OPTARG
      ;;
  t)
      time=$OPTARG
      ;;
  esac
done

shift $((OPTIND - 1))
_

shift $((OPTIND - 1))は、スクリプトの可能な引数、つまり_$1, $2, ..._にアクセスできるようにコマンドラインパラメーターをシフトします

124

の線に沿って何か

pages=
length=
time=

while test $# -gt 0
do
    case $1 in
        -p)
            pages=$2
            shift
            ;;
        -l)
            length=$2
            shift
            ;;
        -t)
            time=$2
            shift
            ;;
        *)
            echo >&2 "Invalid argument: $1"
            ;;
    esac
    shift
done
11
Jo So