私はチュートリアルに従いました。ここ使用方法を学びますgetopts
。ユーザーが提供したすべてのオプションを正しく実行できます。さて、私はオプションが提供されていないときにデフォルトのオプションを実行したいと思います。
たとえば、
while getopts ":hr" opt; do
case $opt in
h )
show_help;
exit 1
;;
r )
echo "Default option executed"
;;
esac
done
したがって、ユーザーがまたはを指定した場合は-h
その-r
コマンドを実行する必要があります(はい)、これらのオプションが指定されていない場合は-r
デフォルトで実行する必要があります。これを達成する方法はありますか?
修正する
cas's
提案を試して、それを*)
私のgetopts
機能に統合しましたが、何も起こらないようです。
while getopts ":hr" opt; do
case $opt in
h )
show_help;
exit 1
;;
r )
echo "Default option executed"
;;
\? )
echo error "Invalid option: -$OPTARG" >&2
exit 1
;;
: )
echo error "Option -$OPTARG requires an argument."
exit 1
;;
* )
echo "Default option executed"
;;
esac
done
このコードに問題がありますか?
ベストアンサー1
解析するオプションがないとステートメントはcase
実行されないため、ステートメントにデフォルトオプションを追加しても役に立ちません。getopts
シェル変数を使用して、どのくらいのオプションを処理しているかを確認できますOPTIND
。からhelp getopts
:
Each time it is invoked, getopts will place the next option in the
shell variable $name, initializing name if it does not exist, and
the index of the next argument to be processed into the shell
variable OPTIND. OPTIND is initialized to 1 each time the shell or
a shell script is invoked.
したがって、OPTIND
1の場合、オプションは処理されません。ループの後に以下を追加しますwhile
。
if (( $OPTIND == 1 )); then
echo "Default option"
fi