我是 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..fi
是case
语句
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
您可以删除与传递的参数相关的固定顺序,如果您忘记参数的顺序,则存在传递错误数据的风险。