私はシェルスクリプトを書いていますが、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