[英]Syntax in if-else block in bash shell script
我对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
。 我该如何解决? 谢谢。
我假设您想测试命令的输出(而不是返回代码)。 然后语法应该像
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
请注意括号前面的多余$
。
括号(前面没有$
创建一个子外壳。 使用$
,它们将替换为括号中命令的输出。
如果您的查询确实输出了比数字更复杂的结果,则可能需要使用类似以下内容的搜索结果中的数字:
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
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
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.