必要なパラメータを1つだけスクリプトに渡す必要があります。

必要なパラメータを1つだけスクリプトに渡す必要があります。

私はシェルスクリプトを書いていますが、getoptsを使ったパラメータ解析が初めてです。 1つのオプションのパラメータと2つの必須パラメータがあります。私が望むのは、1つの必須パラメータだけを渡すことです。基本的な検証は現在存在しますが、長期的には事実上役に立ちません。 if条件を使用して他の例を見てみましたが、やはり失敗しました。ケースにフラグを使用し、個々の状態を確認して関数を呼び出すと、すべてが印刷されます。私が望むのは、1つの必須パラメータのみを使用し、2つ以上のパラメータが渡されるとエラーを発生させることです。これで、すべてのオプションが指定された順序で実行されます。これはコードです

#!/bin/bash

USAGE="Usage : $0 [-r N] (-a|-b)"

#Prompts when there are no arguments passed
if [ "$#" -le 0 ]; then
    echo $USAGE
    exit 2
fi

#the option parsing
while getopts ':n:ab' option
do
    case $option in
        r)
            numlim=$OPTARG
            ;;
        a)
            task1
            ;;

        b)
            task2
            ;;

        *)
            echo "Unknown Param"
            echo $USAGE
            ;;
    esac
done

私が望むのは、特定の方法でコードを設計する方法のヒントです。

ベストアンサー1

ループで実行するジョブを決定する変数を設定し、1つのジョブのみが選択されていることを手動getoptsで確認します。次のようなさまざまな方法でこれを実行できます。

#!/bin/sh
task=
set_task() {
    if [ -n "$task" ]; then
        echo "only one of -a and -b may be used" >&2
        exit 1
    fi
    task=$1
}
while getopts ':n:ab' option; do
    case $option in
        a)  set_task a;; 
        b)  set_task b;;
        *)  echo "unknown option" >&2
            exit 1;;
    esac
done
if [ "$task" = a ]; then
    echo do task a...
elif [ "$task" = b ]; then
    echo do task b...
else
    echo "invalid or unspecified task" >&2
    exit 1
fi

おすすめ記事