【问题标题】:Bash script MySQL connection and query via variableBash 脚本 MySQL 连接和通过变量查询
【发布时间】:2019-07-20 03:53:29
【问题描述】:

我有一个 bash 脚本,其中包含一个用于 mysql 连接详细信息的变量和一个用于我要运行的查询的变量...

#!/bin/bash
#listed in the for loop are query numbers = names
declare -a array=(
"1=Unprocessed===\"select count(*) from db where test='unknown'\""
"2=Total===\"SELECT count(*) FROM db\""

)

sqlconnection=$"/usr/local/bin/mysql -u user -passwd -h xx.xx.xx.xx -se"

for i in "${array[@]}";
do

#map s=selection n= name q=== sql query
s=$(echo "$i" | awk -F "=" '{print $1}')
n=$(echo "$i" | awk -F "=" '{print $2}') 
q=$(echo "$i" | awk -F "===" '{print $2}') 

$sqlconnection \("$query"\)
done

虽然我可以获得 sql 连接和查询以回显,但它实际上并没有运行查询! - 一定有一些我想念的东西:)

【问题讨论】:

  • $query -> $q?
  • FML - 是的,这是问题的一部分,呵呵,谢谢你指出这一点

标签: mysql bash shell centos


【解决方案1】:

sqlconnection 应该是一个函数,而不是一个字符串。此外,您不需要在每个 array 元素中引用整个命令;调用函数时引用 $q 就足够了。

declare -a array=(
  "1=Unprocessed===select count(*) from db where test='unknown'"
  "2=Total===SELECT count(*) FROM db"
)

sqlconnection () {
  /usr/local/bin/mysql -u user -passwd -h xx.xx.xx.xx -se "$@"
}

for i in "${array[@]}"; do
    IFS== read s n _ _ q <<< "$i"
    sqlconnection "$q"
done

【讨论】:

  • 你能解释一下 for 循环在做什么吗?
  • 循环与您的问题相同。我只是用对内置read 命令的一次调用替换了对awk 的各种调用。变量snq应该和以前一样。
  • 使用 sql 连接作为函数我收到此错误:mysql: [警告] 在命令行界面上使用密码可能不安全。 mysql: [错误] /usr/local/bin/mysql: 选项 '-e' 需要一个参数。几乎就好像它没有通过 $q 变量
  • 在调用sqlconnection 之前检查q 的值。如果array 被定义为我在答案中显示的那样,它应该有您的查询。
  • 啊我错过了`“$@”`
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2011-12-16
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2015-12-18
  • 2011-08-20
相关资源
最近更新 更多