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

时间:2017-12-08 10:13:32

标签: 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。

user@server$ ./table_check.sh
table not empty

这里有什么问题?

3 个答案:

答案 0 :(得分:1)

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

#!/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次更改

  1. 将整个mysql语句部分包含在$(..) -->中,以使LHS成为$(...)
  2. 内部的结果
  3. 在mysql连接语句-e中将-sse更改为-->,以仅获取没有标题和表结构的查询结果。
  4. !=更改为-gt -->运算符,以便在bash中进行整数比较

答案 1 :(得分:1)

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

BASH

#!/bin/bash

# Prepare variables
TABLE=$1
SQL_EXISTS=$(printf 'SHOW TABLES LIKE "%s"' "$TABLE")
SQL_IS_EMPTY=$(printf 'SELECT 1 FROM %s LIMIT 1' "$TABLE")

# Credentials
USERNAME=YOUR_USERNAME    
PASSWORD=YOUR_PASSWORD
DATABASE=YOUR_DATABASE_NAME

echo "Checking if table <$TABLE> exists ..."

# Check if table exists
if [[ $(mysql -u $USERNAME -p$PASSWORD -e "$SQL_EXISTS" $DATABASE) ]]
then
    echo "Table exists ..."

    # Check if table has records    
    if [[ $(mysql -u $USERNAME -p$PASSWORD -e "$SQL_IS_EMPTY" $DATABASE) ]]
    then
        echo "Table has records ..."
    else
        echo "Table is empty ..."
    fi
else
    echo "Table not exists ..."
fi

USAGE

首先,在使用此脚本之前,您需要将 YOUR_USERNAME YOUR_PASSWORD YOUR_DATABASE_NAME 替换为相应的值。然后:

# bash SCRIPT_NAME TABLE_TO_CHECK
  bash my_script my_table

其中 SCRIPT_NAME my_script )是包含上述脚本内容的文件的名称, TABLE_TO_CHECK my_table >)是要检查的表的名称。

预期输出

Checking if table <my_table> exists ...  
Table exists ...   
Table is empty ... 

关于该代码的词汇

将命令行中的第一个参数存储在变量TABLE

TABLE=$1

准备两个包含用于检查的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")

检查表是否存在。如果表不存在,SHOW TABLES LIKE "table_name"将失败,if statement将返回空字符串。使用类似$的{​​{1}}意味着 - 评估括号内的任何内容并将其作为值返回。

$(echo 1 + 2)

最后我们检查表是否为空。使用以前的方法。基本上我们检查MySQL是否会返回空字符串(表示空表),否则查询将返回一些文本作为结果,我们可以认为该表不为空。

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

答案 2 :(得分:0)

这应该有效

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