異なるスクリプトの特定の条件に基づいて電子メールを送信する3つの別々のbashスクリプトがあります。私がやりたいことは、これらすべてを1つのスクリプトにまとめて動作させ、メインスクリプトで使用することです。ただし、フラグを使用して正しい関数を呼び出すことです。だから私はこのコードを持っています
main()
{
while getopts "f:s:k:" opt; do
case ${opt} in
f) sendFirstEmail
;;
s) sendSecondEmail
;;
k) sendKillEmail
;;
esac
done
}
main
読みやすくするために、このコードスニペットに実際の関数を入れませんでしたが、これらの関数はそれぞれ1つのパラメータ()を使用します$1
。それで、私が望むのは、次のことができることです。最初のメールをjohndoeに送信することです。これを実行すると、コードは何もしません。script.sh -f [email protected]
答え1
スクリプトの標準であるフラグを解析する必要があります。 Bash 組み込みgetopts
またはcase
コンストラクタを使用できます。man bash
詳細より。まず、すべての関数を定義してからメイン関数を定義し、main
最後にそれを呼び出してフラグを渡します。
スクリプトの呼び出し方法に応じて切り替え、別の名前でシンボリックリンクを作成することもできます。
答え2
フラグに付属のパラメーターを関数に渡しません。 getopts フラグ値を保持する変数は OPTARG です。
main()
{
while getopts "f:s:k:" opt; do
case “${opt}” in
f) sendFirstEmail “$OPTARG”
;;
s) sendSecondEmail “$OPTARG”
;;
k) sendKillEmail “$OPTARG”
;;
esac
done
}
main