0

In attempting to verify if a remote database exists or not, I'm seeing mixed behavior with a conditional statement.

Technically the statement is working (it correctly reports if database is found), but on fail (no database found), it's throwing an error that I'm unable to trace for some reason.

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

Unsure where I'm going wrong. Login details are being passed via stored configurations from mysql_config_editor, which leads me to believe it's something fundamentally wrong with how my condition or method of going about this is setup.

Unfortunately, the error is vague and being caught in a trap in my script, so reporting is a bit fuzzy. Also, I've tried the following as well:

[ "$REMOTE_EXISTS" -eq 0 ]

[[ "$REMOTE_EXISTS" ]]

No better luck.

Help is appreciated, thank you!

5
  • Just to get you correctly: if the database is NOT found it neither goes to the first, nor the last option in your if-query, but rather fails somewhere else?
    – FelixJN
    Mar 7, 2016 at 8:31
  • What is vrb? What is die? (This should be Bash, not Perl, right?)
    – Dubu
    Mar 7, 2016 at 9:03
  • @Dubu vrb and die are helper functions from elsewhere in the script. Good question though. Mar 7, 2016 at 18:04
  • @Fiximan Confirming this. It seemed to be hitting the elif Mar 7, 2016 at 18:04
  • @WillAshworth so always on the elif? Can you be more specific about the outcomes in each situation? I would suggest replacing the commands in your if-query with echo 1 > test_outcome, echo 2 > test_outcome, and echo 3 > test_outcome respectively, to see which case is met in the respective situations.
    – FelixJN
    Mar 7, 2016 at 20:44

1 Answer 1

2

I would try

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
  • I am unsure you need to single quote REMOTE_XX var.
0

You must log in to answer this question.

Not the answer you're looking for? Browse other questions tagged .