从bash脚本

时间:2016-11-02 15:35:26

标签: mysql linux bash shell

我是bash脚本的新手,我正在练习一些简单的脚本。我正在创建一个连接到MySQL数据库的脚本,执行查询并回显结果。 这是我到目前为止所得到的,但我得到了这个令人沮丧的错误:

./testsql: line 22: syntax error near unexpected token `queryConfig="mysql -uroot -p1234 test"'
./testsql: line 22: `queryConfig="mysql -uroot -p1234 test"'

这是我脚本中的功能。

function testFunction{
queryConfig="mysql -uroot -p1234 test"
hello=`$queryConfig"SELECT * FROM test_accounts;"`
echo "Result = " $hello
}

好的我知道理想情况下我不应该将用户名和密码传递给脚本,而是使用config.sh,然后将其包含在脚本中。使用root也不理想。但重要的是我理解sytax错误在哪里以及解释器为什么抱怨。 一旦我完成这项工作,我就可以相应地创建一个config.sh和变量。 感谢。

2 个答案:

答案 0 :(得分:1)

试试这个

var=$(mysql database -u $user -p$password<<<"SELECT * FROM test_accounts")

答案 1 :(得分:0)

此错误:

./testsql: line 22: syntax error near unexpected token `queryConfig="mysql -uroot -p1234 test"'

说Bash脚本的第22行有语法错误(即它不是有效的Bash)。解析器并不认为你可以在这里做变量赋值。但为什么呢?

问题出在上面一行:

function testFunction{

Bash非常敏感空白,并且您在函数名称和{字符之间缺少空格。尝试添加空格,您将解决此语法错误。

您的脚本中还有其他问题(除了您提到的安全问题之外),我将简要介绍一下:

  • 避免使用反引号,$(...)更喜欢command substitution。当你开始在另一个内部嵌套替换时,它更容易阅读并且工作得更好。
  • 注意空白,例如你的下一行

    hello=`$queryConfig"SELECT * FROM test_accounts;"`
    

    将执行命令

    mysql -uroot -p1234 testSELECT * FROM test_accounts;
    

    注意testSELECT那里 - 你错过了一个空格。

  • 注意引用。 Quoting in Bash很难,但要做到正确很重要。内部化有一些好的best-practices,这使得在Bash中使用引号变得更容易。