繁体   English   中英

bash shell脚本中if-else块中的语法

[英]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_MYSQLif ,我想是因为我尝试调用变量$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.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM