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

时间:2014-02-05 07:40:23

标签: bash shell

我是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。我该怎么解决这个问题?感谢。

2 个答案:

答案 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