bashshell脚本中if-else块中的语法

bashshell脚本中if-else块中的语法,bash,shell,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';")

我对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
您可以安全地忽略其他变量


我在
if
之后的
$CMD\u MYSQL
附近有语法错误,我想是因为我试图调用变量
$CMD\u 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
注意括号前面的额外
$

括号前面不带
$
,用于创建子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

尝试echo“
$CMD\u MYSQL--execute=”将表$tablename重命名为${tablename}\u old
";@RaghunandanKrishnamurthy抱歉,不是那
$CMD\u MYSQL
。请参见编辑。语法错误在
if
条件中。是否使用
mysql
输出的返回码?在前一种情况下,您不需要方括号和
-eq
,在后一种情况下,您缺少
$
之前的
(MYSQL
@bobah是的,我只想测试输出。使用acute/backquote-acute查询返回的确切内容是什么?如果出现该错误,可能意味着您的查询返回几个单词,而不是一个数字。我想我在MYSQL查询中错过了
-N-s
)。
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