通过 BASH 脚本验证命令的输出不太有效

通过 BASH 脚本验证命令的输出不太有效

在尝试验证远程数据库是否存在时,我看到条件语句的混合行为。

从技术上讲,该语句正在工作(它会正确报告是否找到数据库),但如果失败(未找到数据库),它会抛出一个错误,由于某种原因我无法跟踪该错误。

REMOTE_EXISTS=$(mysql --login-path=$REMOTE_HOST --batch --skip-column-names -e "SHOW DATABASES LIKE '"$REMOTE_DB"';" | grep "$REMOTE_DB")

if [[ $? != 0 ]]; then
    die "Checking for $REMOTE_DB failed. Please report this error."
elif [[ $REMOTE_EXISTS ]]; then
    vrb "The database '$REMOTE_DB' has been found to exist on '$REMOTE_HOST'. Proceeding."
else
    die "Oops! We couldn't find '$REMOTE_DB' on the '$REMOTE_HOST' server. Are you sure it's there?"
fi

不确定我哪里出错了。登录详细信息是通过存储的配置传递的mysql_config_editor,这使我相信我的条件或设置方法存在根本性错误。

不幸的是,错误是模糊的,并且被我的脚本中的陷阱所捕获,因此报告有点模糊。另外,我也尝试过以下方法:

[ "$REMOTE_EXISTS" -eq 0 ]

[[ "$REMOTE_EXISTS" ]]

没有更好的运气。

感谢您的帮助,谢谢!

答案1

我会尝试

mysql --login-path=$REMOTE_HOST --batch --skip-column-names -e "SHOW DATABASES LIKE '"$REMOTE_DB"';"  > /tmp/remote_db

if [[ $? != 0 ]]; then
    die "Checking for $REMOTE_DB failed. Please report this error."
elif grep -q "$REMOTE_DB" /tmp/remote_db ; then
    vrb "The database '$REMOTE_DB' has been found to exist on '$REMOTE_HOST'. Proceeding."
else
    die "Oops! We couldn't find '$REMOTE_DB' on the '$REMOTE_HOST' server. Are you sure it's there?"
fi
  • 我不确定您是否需要单引号REMOTE_XXvar。

相关内容