POSIX
標準に従うgitのようなコマンドラインツールを書きたいです。--help
or など-h
のオプションを取ります--version
。しかし、私はそれを行う方法がわかりません。bash スクリプトを使用してこれを行う方法を教えてください。私を助けてください。これは私にとって非常に新しいことです。
例: ツールの名前が Check-code の場合、次のようなツールを使用したい。
Check-code --help
また
Check-code --version
POSIX
標準に従うgitのようなコマンドラインツールを書きたいです。--help
or など-h
のオプションを取ります--version
。しかし、私はそれを行う方法がわかりません。bash スクリプトを使用してこれを行う方法を教えてください。私を助けてください。これは私にとって非常に新しいことです。
例: ツールの名前が Check-code の場合、次のようなツールを使用したい。
Check-code --help
また
Check-code --version
私の知る限り、「長いオプション」は POSIX 標準--help
で--version
はなく、GNU 標準です。コマンドライン ユーティリティの場合、POSIX 標準では次のように規定されています。
ハイフンと 1 文字または数字 (「a」など) で構成される引数は、「オプション」(歴史的には「フラグ」) として知られています。
POSIX の短いオプション オプションをサポートするには、知っておく価値がありますgetopts
(Web にチュートリアルがあります) が、GNU の長いオプションはサポートされていません。
長いオプションの場合は、自分でロールする必要があります。
filename=default
while (( $# > 0 ))
do
opt="$1"
shift
case $opt in
--help)
helpfunc
exit 0
;;
--version)
echo "$0 version $version"
exit 0
;;
--file) # Example with an operand
filename="$1"
shift
;;
--*)
echo "Invalid option: '$opt'" >&2
exit 1
;;
*)
# end of long options
break;
;;
esac
done
次のように「getopts」ビルトインを使用できます。
#!/bin/bash
# Parse arguments
usage() {
echo "Usage: $0 [-h] [-v] [-f FILE]"
echo " -h Help. Display this message and quit.
echo " -v Version. Print version number and quit.
echo " -f Specify configuration file FILE."
exit
}
optspec="hvf:"
while getopts "$optspec" optchar
do
case "${optchar}" in
h)
usage
;;
v)
version
;;
f)
file=${OPTARG}
;;
*)
usage
;;
esac
done
-help
これは、やのような長いオプションではなく、1 文字のオプションでのみ機能します--help
。実際には、これが重大な制限であることに気付いたことはありません。長いオプションを必要とするほど複雑なスクリプトは、おそらく私が別の言語で書くものです。
これを行うにはおそらくもっと良い方法がありますが、私が便利だと思う方法は次のとおりです。各引数は、BASH の変数で表されます。最初の引数は$1
. 2 番目は$2
などです。オプション文字列を最初の引数と一致させ、一致する場合はそれに応じてコードを実行します。
例:
#!/bin/bash
if [ $1 == "--hello" ]
then
echo "Hello"
else
echo "Goodbye"
fi
C または C++ でコーディングする場合は、**argv
変数を使用します。 **argv
プログラムに渡されるすべての引数のリストを保持する二重ポインターです (argv[0]
プログラム名)。