Mysql 如何使用shell脚本检查数据库中是否存在表

Mysql 如何使用shell脚本检查数据库中是否存在表,mysql,shell,Mysql,Shell,我试图使用shell脚本检查表是否为空 我的密码是 #!/bin/bash if [ "mysql -u user -ppassword -hserver dbname -e 'select count(*) from test_dec;'" != 0 ]; then echo "table not empty" else echo "table empty" fi 但是,当我运行此命令时,即使查询的输出为0,它也始终显示“table not empty” u

我试图使用shell脚本检查表是否为空 我的密码是

#!/bin/bash

if [ "mysql -u user -ppassword -hserver dbname -e 'select count(*) from test_dec;'" != 0 ];
then
        echo "table not empty"
else
        echo "table empty"
fi
但是,当我运行此命令时,即使查询的输出为0,它也始终显示“table not empty”

user@server$ ./table_check.sh
table not empty
这里出了什么问题?

这应该行得通

if [ $(mysql -u root -p -e \
  "select count(*) from information_schema.tables where \
     table_schema='db_name' and table_name='table_name';") -eq 1 ]; then
echo "table exist"
   exit 1
else
   echo "table doesn't exist"
   exit 1
fi
这应该行得通

if [ $(mysql -u root -p -e \
  "select count(*) from information_schema.tables where \
     table_schema='db_name' and table_name='table_name';") -eq 1 ]; then
echo "table exist"
   exit 1
else
   echo "table doesn't exist"
   exit 1
fi

我认为下面会做你的工作

#!/bin/bash

if [ $(mysql -u user -ppassword -hserver dbname -sse "select count(*) from test_dec;") -gt 0 ];
then
        echo "table not empty"
else
        echo "table empty"
fi
3个脚本更改,

  • 将整个mysql语句部分括在
    $(…)
    -->
    中,使
    LHS
    成为
    $(…)
  • 在mysql连接语句中,将
    -->
    中的
    -e
    更改为
    -sse
    ,以仅获取要输出的查询结果,而不使用头和表结构
  • 更改
    =
    -gt
    -->
    运算符

  • 我认为下面会做你的工作

    #!/bin/bash
    
    if [ $(mysql -u user -ppassword -hserver dbname -sse "select count(*) from test_dec;") -gt 0 ];
    then
            echo "table not empty"
    else
            echo "table empty"
    fi
    
    3个脚本更改,

  • 将整个mysql语句部分括在
    $(…)
    -->
    中,使
    LHS
    成为
    $(…)
  • 在mysql连接语句中,将
    -->
    中的
    -e
    更改为
    -sse
    ,以仅获取要输出的查询结果,而不使用头和表结构
  • 更改
    =
    -gt
    -->
    运算符

  • 这是我的脚本版本,它将首先检查表是否存在,如果是,将检查表是否为空

    猛击 其中,SCRIPT\u NAME(my\u SCRIPT)是保存上述脚本内容的文件名,TABLE\u TO\u CHECK(my\u TABLE)是要检查的表名

    预期产量
    准备两个变量,用于保存用于检查的SQL查询。 请注意,
    printf
    用于在变量中插入表名,因为
    $('SHOW TABLES LIKE“$table')
    不起作用

    SQL_EXISTS=$(printf 'SHOW TABLES LIKE "%s"' "$TABLE")
    SQL_IS_EMPTY=$(printf 'SELECT COUNT(*) as records FROM %s' "$TABLE")
    

    检查表是否存在<如果表不存在,代码>显示表(如“table_name”
    将返回空字符串,
    if语句将失败。像
    $(echo 1+2)
    一样使用
    $
    意味着-计算括号内的内容并将其作为值返回

    if [[ $(mysql -u $USERNAME -p$PASSWORD -e "$SQL_EXISTS" $DATABASE) ]]
    

    最后我们检查表是否为空。使用前面的方法。基本上,我们检查MySQL是否返回空字符串(对于空表),否则查询将返回一些文本,因此我们可以考虑表不是空的。
    if [[ $(mysql -u $USERNAME -p$PASSWORD -e "$SQL_IS_EMPTY" $DATABASE) ]]
    

    这是我的脚本版本,它将首先检查表是否存在,如果是,将检查表是否为空

    猛击 其中,SCRIPT\u NAME(my\u SCRIPT)是保存上述脚本内容的文件名,TABLE\u TO\u CHECK(my\u TABLE)是要检查的表名

    预期产量
    准备两个变量,用于保存用于检查的SQL查询。 请注意,
    printf
    用于在变量中插入表名,因为
    $('SHOW TABLES LIKE“$table')
    不起作用

    SQL_EXISTS=$(printf 'SHOW TABLES LIKE "%s"' "$TABLE")
    SQL_IS_EMPTY=$(printf 'SELECT COUNT(*) as records FROM %s' "$TABLE")
    

    检查表是否存在<如果表不存在,代码>显示表(如“table_name”
    将返回空字符串,
    if语句将失败。像
    $(echo 1+2)
    一样使用
    $
    意味着-计算括号内的内容并将其作为值返回

    if [[ $(mysql -u $USERNAME -p$PASSWORD -e "$SQL_EXISTS" $DATABASE) ]]
    

    最后我们检查表是否为空。使用前面的方法。基本上,我们检查MySQL是否返回空字符串(对于空表),否则查询将返回一些文本,因此我们可以考虑表不是空的。
    if [[ $(mysql -u $USERNAME -p$PASSWORD -e "$SQL_IS_EMPTY" $DATABASE) ]]
    

    它运行时给了我一个错误行3:[:-gt:unary操作符expected如果你确定,你使用了
    -sse
    ,输出是
    count(*)
    。很高兴听到。(Y)。它运行时给了我一个错误行3:[:-gt:unary操作符expected如果你确定,你使用了
    -sse
    ,输出是
    count(*)
    。很高兴听到。(Y).