根据标志在 bash 脚本中运行某些函数

根据标志在 bash 脚本中运行某些函数

我有三个独立的 bash 脚本,它们根据另一个脚本中的某些条件发送电子邮件。我想做的是将所有这些组合到一个脚本中,使它们发挥作用并在主脚本中使用它,但使用标志来调用正确的函数。所以我有这个代码

main()
{

    while getopts "f:s:k:" opt; do
        case ${opt} in
            f) sendFirstEmail 
            ;;
            s) sendSecondEmail 
            ;;
            k) sendKillEmail 
            ;;
        esac
    done
}

main

为了便于阅读,我没有将实际函数放入该代码段中,但这些函数每个都带有一个参数:$1。所以我想要的是能够做到这一点:并向 johndoe 发送第一封电子邮件。当我运行这个时,代码什么也不做。script.sh -f [email protected]

答案1

您需要解析该标志,这是脚本编写中的标准操作。您可以使用 Bash 内置函数getoptscase构造函数。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

相关内容