0

私はそれで与えることができる約10個のオプションのパラメータを持つスクリプトを作成しました:

-s sorts the list
-d gives all the directories of the map
-a also the hidden files of the map

例:. MyScript -d Downloads

しかし今、すべてのパラメーターを組み合わせる適切な方法が必要です

だから私はできる:-sda or -s -d

これを機能させる簡単な方法はありますか?誰かがこれについて少し説明やチュートリアルを持っている場合は、投稿してください!

読むためのThnx

4

2 に答える 2

2

getopts内部機能を利用できます。この例のようにしてみてください:

while getopts abc: name; do
  echo $name, OPTARG: $OPTARG, OPTIND: $OPTIND, OPTERR: $OPTERR
done

走る:./test -ab -c file

結果:

a, OPTARG: , OPTIND: 1, OPTERR: 1
b, OPTARG: , OPTIND: 2, OPTERR: 1
c, OPTARG: file, OPTIND: 4, OPTERR: 1

変数nameは、解析された引数に設定されます。文字の後に がある場合、変数:に配置される引数が期待されます。次に処理する引数を表示します。OPTARGOPTIND

OPTERRが設定されている場合、エラーが発生した場合、 はエラー メッセージを表示します。最初の引数が の場合、:エラー メッセージは抑制されます。

走る:./test -d

結果:

./test: illegal option -- d
?, OPTARG: , OPTIND: 2, OPTERR: 1

または./test -c(-c追加の引数が必要です)

結果:

./test: option requires an argument -- c
?, OPTARG: , OPTIND: 2, OPTERR: 1

したがって、それが悪いオプションであるnameかどうかをテストできます。?

于 2013-06-03T08:37:38.693 に答える
2

getoptsはあなたが探しているものだと思います。
ここでは、開始するための簡単なチュートリアルを示します。

例 (チュートリアルから直接取得):

#!/bin/bash

while getopts ":a:" opt; do
  case $opt in
    a)
      echo "-a was triggered, Parameter: $OPTARG" >&2
      ;;
    \?)
      echo "Invalid option: -$OPTARG" >&2
      exit 1
      ;;
    :)
      echo "Option -$OPTARG requires an argument." >&2
      exit 1
      ;;
  esac
done

よろしく

于 2013-06-03T08:37:58.837 に答える