オプションのパラメータは必須パラメータの後ですか、前ですか?

オプションのパラメータは必須パラメータの後ですか、前ですか?

シェルスクリプトを作成していますが、2つの必須パラメータと1つのオプションパラメータを受け入れる必要があります。どうやって確認しますか?私が見たほとんどのスクリプトでは、オプションのパラメータが必須パラメータの前に渡されます。たとえば、次のようになります。

cut -c2 test.txt

しかし、私の考えでは、このパターンをスクリプトで確認するのは複雑なので、3番目のパラメータをオプションとして扱うことをお勧めします。

ベストアンサー1

最後のオプションのパラメータに同意すると、次のことができます。

foo=$1
bar=$2
baz=${3:-default value}

これにより、最初の2つのパラメータが$foosumに保存されます$bar。 3番目の引数が指定された場合は保存され、$bazそれ以外の場合はデフォルト値になりますdefault value。 3番目の変数が空であることを確認することもできます。

if [ -z "$3" ]; then
    # Code for the case that the user didn't pass a third argument
fi

最初からデフォルト値を使用したい場合は、最も簡単な方法は$#

case $# in
  2)
    # Put commands here for when the user passes two arguments
    # Could just be setting variables like above, or anything else you need
    ;;
  3)
    # Put commands here for when the user passes three arguments
    ;;
  *)
    echo "Wrong number of arguments passed"
    exit 1;;
esac

エラーチェックが必要な場合は、$#どちらの場合もオープンが正常に機能します。スクリプトが例のようにgetoptスタイルパラメータを使用している場合は、これを使用できますcutこのスタックオーバーフローの質問より多くの情報を知りたい場合

おすすめ記事