フラグに基づいてbashスクリプトで特定の機能を実行する

フラグに基づいてbashスクリプトで特定の機能を実行する

異なるスクリプトの特定の条件に基づいて電子メールを送信する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

関連情報