我有三个独立的 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 内置函数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