Mysql 如何使用shell脚本检查数据库中是否存在表
我试图使用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
#!/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个脚本更改,
$(…)
-->
中,使LHS
成为$(…)
-->
中的-e
更改为-sse
,以仅获取要输出的查询结果,而不使用头和表结构=用于bash中整数比较的code>到-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个脚本更改,
$(…)
-->
中,使LHS
成为$(…)
-->
中的-e
更改为-sse
,以仅获取要输出的查询结果,而不使用头和表结构=用于bash中整数比较的code>到-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).