我是bash shell脚本的新手,我有以下内容:
CMD_MYSQL="${MYSQL_DIR}mysql --user=${MYSQL_USER} --pass=${MYSQL_PASS} ..."
if [ ($CMD_MYSQL --execute="SELECT COUNT(*) FROM information_schema.tables WHERE \
table_schema='$MYSQL_DB' and table_name='${tablename}_new';") -eq 1 ]; then
...
else
echo "Table ${tablename}_new does not exist."
fi
您可以安全地忽略其他变量。
我在$CMD_MYSQL
之后if
附近有语法错误,我想是因为我尝试调用变量$CMD_MYSQL
。我该怎么解决这个问题?感谢。
答案 0 :(得分:1)
我假设您要测试命令的输出(而不是其返回代码)。然后语法看起来应该是
CMD_MYSQL="${MYSQL_DIR}mysql --user=${MYSQL_USER} --pass=${MYSQL_PASS} ..."
if [ "$($CMD_MYSQL --execute="SELECT COUNT(*) FROM information_schema.tables WHERE \
table_schema='$MYSQL_DB' and table_name='${tablename}_new';")" -eq 1 ]; then
echo "Renaming ($MYSQL_DB.$tablename)..."
$CMD_MYSQL --execute="RENAME TABLE $tablename to ${tablename}_old;"
else
echo "Table ${tablename}_new does not exist."
fi
注意括号前面的额外$
。
前面没有$
的括号创建一个子shell。使用$
,它们将替换为括号中命令的输出。
如果您的查询确实输出的结果比数字更复杂,您可能需要搜索结果中的数字,如下所示:
if [[ "$($CMD_MYSQL --execute="SELECT COUNT(*) FROM information_schema.tables WHERE \
table_schema='$MYSQL_DB' and table_name='${tablename}_new';")" == *1* ]]; then
echo "Renaming ($MYSQL_DB.$tablename)..."
$CMD_MYSQL --execute="RENAME TABLE $tablename to ${tablename}_old;"
else
echo "Table ${tablename}_new does not exist."
fi
答案 1 :(得分:0)
CMD_MYSQL="${MYSQL_DIR}mysql --user=${MYSQL_USER} --pass=${MYSQL_PASS} ..."
if [ "**$CMD_MYSQL --execute="SELECT COUNT(*) FROM information_schema.tables WHERE \
table_schema='$MYSQL_DB' and table_name='${tablename}_new';**" -eq 1 ]; then
echo "Table ${tablename}_new **does** exist."
else
echo "Table ${tablename}_new does **not** exist."
fi