在尝试验证远程数据库是否存在时,我看到条件语句的混合行为。
从技术上讲,该语句正在工作(它会正确报告是否找到数据库),但如果失败(未找到数据库),它会抛出一个错误,由于某种原因我无法跟踪该错误。
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_XX
var。