いくつかの検証を行うためのスクリプトを書いています。私は、すべてのパラメータが適切に格納されているかどうかを確認するために、複数のifを作成しようとしました。 これを進めるには良い方法か、これを達成するための別の戦略があるかどうかを知りたいと思います。この実装のもう一つの問題は、ユーザーがすべてのパラメータを入力していないとき、私のスクリプトはこれだけである場合は、最初の印刷していることである:次の検証を最適化する方法は?
Missing supplierCode
私の完全なコードは次のようになります。より良い実装をするためのアイディアや提案を感謝したいと思います。
#!/bin/bash
function menu() {
while (($# >= 1))
do
key="$1"
case $key in
--supplierCode)
supplier_code=$2
shift
;;
--vanID)
van_id=$2
shift
;;
--vanIDp)
van_idp=$2
shift
;;
--tgoID)
tgo_id=$2
shift
;;
--tgoIDp)
tgo_idp=$2
shift
;;
--company_name)
company_name=$2
shift
;;
--ediFact)
file_type=E
;;
--webEdi)
file_type=P
;;
--PV)
pv=1
;;
--PT)
pt=1
;;
--help)
exit
;;
esac
shift
done
}
function error() {
#Validations:
if [ -z "$supplier_code" ]
then
echo "Missing supplierCode"
exit 1
fi
if [ -z "$van_id" ]
then
echo "Missing vanID"
exit 1
fi
if [ -z "$van_idp" ]
then
echo "Missing vanIDp"
exit 1
fi
if [ -z "$tgo_id" ]
then
echo "Missing tgoID"
exit 1
fi
if [ -z "$tgo_idp" ]
then
echo "Missing tgoIDp"
exit 1
fi
if [ -z "$company_name" ]
then
echo "Missing company_name"
exit 1
fi
if [ -z "$file_type" ]
then
echo "Missing ediFact or webEdi"
exit 1
fi
if [ "$pv" -eq "0" ] && [ "$pt" -eq "0" ]
then
echo "Error: You have to use at least one of those flags --PV , --PT "
exit 1
fi
}
menu "[email protected]"
error
まだあなたの質問に気をつけようとしています;-)一方、エラー機能で '$ van_idp'を無視しないように' p'を追加してください。それから私は、メニュー機能のエコーステートメントのノイズを削除します。あなたがshellcheck.netのようなオンラインのbash lintersを実行すると、あなたのスクリプトは大丈夫です。今本当の質問に...ああ簡単です。 ifチェックセクション... cfで終了呼び出しを削除します。私の答え。 – Dilettant
この関数を使用してスクリプト引数を取得していますか?もしそうなら、代わりにgetoptsを使うべきです。これは非常に便利です。 [例](http://stackoverflow.com/a/37786981/2394026) - [チュートリアル](http://wiki.bash-hackers.org/howto/getopts_tutorial) – Flows
私はgetoptsのためにそれをすることにしました ' 2つ以上の文字で構成されたフラグを許可しますが、提案に感謝します。 – neo33