这是我的脚本版本,它会首先检查表是否存在,如果存在则检查表是否为空。
重击
#!/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
用法
首先,在使用此脚本之前,您需要将 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 将失败。像$(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) ]]