将参数传递给作为 cronjob 运行的 shell 脚本

将参数传递给作为 cronjob 运行的 shell 脚本

我是 Bash 脚本的新手(不是一般的编程)。

我正在编写一个 bash 脚本,它将运行我编写的 Python 脚本。

我希望能够执行以下操作:

  • 通过 cronjob 将参数传递给 bash 脚本(这样我可以有两个 cron 作业),一个使用参数“foobar”运行,另一个使用参数“foo”运行

  • 根据传递给 bash 脚本的参数进行切换(通过切换,我的意思是基于传递给 bash 脚本的参数的 if/else)。

答案1

我本来想让你去 stackoverflow 看看,但这太低级了,所以最好还是在这里做吧。

shell 脚本的第一个参数由 引用$1,第二个参数由 引用$2,等等...第十个参数不能被调用,$10因为它$1后面跟着一个0,所以你把它引用为${10},但如果你需要明确引用第十个参数(而不是在循环中处理它)你可能做错了什么。

参数的数量在变量中$#

我建议:

if [ $# -ne 1 ]
then
    echo "No parameter given" >&2
    exit 1
elif [ "$1" == 'foo' ]
then
    ./script someparams ....
elif [ "$1" == 'foobar' ]
then
    ./script otherparams ....
else
    echo "Bad parameter given" >&2
    exit 1
fi

答案2

另一种形式if..elif..elif..else..ficase语句

case "$1" in
  foobar) 
    ./script.py arg1 arg2
    ;;
  foo)
    ./script.py arg3 arg4
    ;;
  *)
    echo "unknown argument: $1"
    ;;
esac

case使用 glob 样式匹配,因此*表示“其他一切”

您会发现 bash 是一种非常挑剔的语言,引用或不引用变量会导致脚本运行方式的巨大差异。养成引用所有变量的习惯。

答案3

您还可以使用getopts更灵活的方式将参数传递给 bash 脚本。通过使用,getopts您可以删除与传递的参数相关的固定顺序,如果您忘记参数的顺序,则存在传递错误数据的风险。

相关内容