抓取bash变量输入数据到MySQL

时间:2014-12-27 17:22:37

标签: mysql bash variables

所以我试图结合两个bash脚本的好部分。我需要获取由成功的PAM会话创建的环境变量并将它们传递给MySQL语句。

通过将流程分解为部分以进行故障排除,我能够从以下代码片段开始,这些代码本身可以工作,但它不是整个包而且远非使用变量:

#!/bin/bash
mysql -h localhost -u user -ppassword << EOF 
insert into database.table (PAM_RHOST,PAM_SERVICE,PAM_TTY) values ('1','2','3');
EOF

好的,所以上面实际上将数据插入到MySQL数据库中。到目前为止,故障排除非常好。因此,我的最终目标是将上述内容与以下代码段结合使用,但不是发送电子邮件,而是需要脚本执行上述脚本所做的操作,即抓取环境变量并将数据输入MySQL。用于发送电子邮件的原始脚本是:

#!/bin/bash
adminEmail="someemail@someplace.com"
[ "$PAM_TYPE" == "open_session" ] || exit 0
{
echo "User: $PAM_USER"
echo "Remote Host: $PAM_RHOST"
echo "Service: $PAM_SERVICE"
echo "TTY: $PAM_TTY"
echo "Date: `date`"
echo "Server: `hostname -s`"
} | mail -s "`hostname -s` $PAM_SERVICE login: $PAM_USER" $adminEmail

所以我试图做的是将一些碎片粘在一起,这是行不通的。我想出了以下内容并需要帮助:

#!/bin/bash
[ "$PAM_TYPE" == "open_session" ] || exit 0
{
echo "User: $PAM_USER"
echo "Remote Host: $PAM_RHOST"
echo "Service: $PAM_SERVICE"
echo "TTY: $PAM_TTY"
echo "Date: `date`"
echo "Server: `hostname -s`"
} 
mysql -h localhost -u user -ppassword << EOF 
insert into database.table (PAM_USER,PAM_RHOST,PAM_SERVICE,PAM_TTY) values '$PAM_USER','$PAM_RHOST','$PAM_SERVICE,$PAM_TTY');
EOF 

2 个答案:

答案 0 :(得分:2)

您在SQL语句的values子句中遇到了一些语法错误。

values ('$PAM_USER','$PAM_RHOST','$PAM_SERVICE','$PAM_TTY');
       ^                                      ^ ^

答案 1 :(得分:0)

Oooops。你是对的。我修改了现在可以运行的脚本,并将其放在可能需要这样一个脚本的其他人的下面。我现在唯一关心的是清理脚本,因为:1)脚本位于任何公开可用的目录之外; 2)我担心有人可以通过连接传递变量,所以我想知道什么是好的消毒或防止这种情况。因此,脚本是有效的:

#!/bin/bash
if [ "$PAM_TYPE" == "open_session" ]

then 

mysql -h localhost -u user -ppassword << EOF 
insert into database.table (PAM_USER,PAM_RHOST,PAM_SERVICE,PAM_TTY,SERVER) values ('$PAM_USER','$PAM_RHOST','$PAM_SERVICE','$PAM_TTY',"`hostname -s`");
EOF

fi