2017-02-13 55 views
0

我想传递的参数表名在MySQL命令行shell脚本是我的小shell脚本:通作为一个MySQL的命令行参数表名,在shell脚本

if [ "$1" != "" ]; then 
    mysql \ 
     --user=genome \ 
     --host=genome-mysql.cse.ucsc.edu \ 
     -A -D hg38 \ 
     -e 'desc' "$1" \ 
     -B -N \ 
     | awk 'BEGIN {ORS="\t"};{print $1}' | awk '{print "#"$0}' 
else 
    echo "Error." 
fi 

所以,当我尝试运行我的脚本是这样的:

bash Script.sh tablename 

它返回以下错误:

ERROR 1049 (42000): Unknown database 'tablename' 

因此,F新事物为您自己的信息:

  • 我有权访问数据库。

  • 表存在于数据库中,当我在直接执行与该表名的命令。

  • 我 “DESC $ 1”, '内容描述 “$ 1”', 'desc “的$ 1”' 可选地试过。 ..总是返回一个错误(错误1049或1064)。

  • awk下面的命令行不是问题的根源。

  • 我也试过在Python 2.7与子,和它给完全相同的错误:

    ERROR 1049(42000):未知的数据库 '表名'

  • 我试图找到的一些帮助网页,也许,似乎MySQL不允许传递表名作为参数。

由于我有多个表迭代,我没有其他选择。

非常感谢您的帮助。

回答

1

-e的参数必须是单个字符串。您将表名称作为desc的单独参数,因此它被视为数据库名称参数。将其更改为:

-e "desc $1" 

这里是我的整个脚本:

#!/bin/bash 

if [ "$1" != "" ]; then 
    mysql \ 
     -A -D bbodb_test \ 
     -e "desc $1" \ 
     -B -N \ 
     | awk 'BEGIN {ORS="\t"};{print $1}' | awk '{print "#"$0}' 
else 
    echo "Error." 
fi 

然后我运行:

./scriptname t_users 

其中t_users是我的一个表的名称。

我省略了--user--host的参数,因为我从我的~/.my.cnf文件中得到了它们,但我认为它不应该有所作为。

+0

对不起,我忘了提,我也试过这个。它返回相同的错误: 错误1049(42000):未知的数据库'表名' –

+0

最烦人的部分是错误返回消歧符号之间的数据库表。似乎MySQL无法克服我的参数是字符串的事实,并将其理解为引用的内容。 –

+0

我刚试过,它对我很有用。我不知道为什么它不适合你。 – Barmar

相关问题