-c
それぞれにオプションが必要なスクリプトを作成したいと思い-f
ます。
以下のスクリプトを実行すると、予期しないエラーが発生します。
$ ./user.sh -c
./user.sh: option requires an argument -- c
Usage: user.sh -c username -f filename
-c username
-f SSH public key
$ ./user.sh -c gg
Error: You have not given a filename.
最初のケースでは、 のオプションが欠落していると言われたらよかったのですが-c
、2 番目のケースでは、欠落していると言われればよかったと思います-f
。
質問
このようなエラー処理を行うにはどうすればよいですか? また、何が間違っているのでしょうか?
user.sh
#!/bin/bash
usage () {
echo "Usage: user.sh -c username -f filename"
echo " -c username"
echo " -f SSH public key"
echo ""
}
if ! [ "$*" ]; then
usage
exit 1
fi
while getopts "c:f:" opt; do
case $opt in
c) user=$OPTARG;;
f) filename=$OPTARG;;
\?)
echo
usage
exit 1;;
*) echo "Internal error: Unknown option.";;
esac
done
if ! [ $filename ]; then
echo "Error: You have not given a filename."
exit 1
fi
if ! [ $user ]; then
echo "Error: You have not given an username."
exit 1
fi