通过 bash 在数据库名称中使用破折号删除数据库

通过 bash 在数据库名称中使用破折号删除数据库

我在脚本中有一个变量,其中包含名称中带有破折号的文件夹名称列表

DBDIR="some directory"
dbdash=`ls -l $DBDIR | egrep '^d' | grep '.-.' | awk '{print $9}'`

我想删除变量“dbdash”中所有与文件夹同名的数据库

dbhype=($dbdash)
for dbtry in ${!dbhype[*]}
    do            
        mysqladmin -u$dbUser -p$dbPass 'drop database if exists `'${dbhype[$dbtry]}'` CHARACTER SET utf8 COLLATE utf8_general_ci;'
done

但是运行脚本后出现了这个错误

mysqladmin:未知命令:‘如果存在 folder_name CHARACTER SET utf8 COLLAT,则删除数据库’

如何使用脚本删除这些数据库?请帮忙。

答案1

首先,您混淆了mysqladmin和常规的mysql。前者不使用 SQL,只使用特定的自定义命令。

其次,停止解析 的输出ls。您可以直接使用通配符来获取文件列表。

DBDIR="some directory"

for db_dir in "$DBDIR"/*-*/; do
    db_name=$(basename "$db_dir")
    # The other way:
    # db_name=${db_dir%/}; db_name=${db_dir##*/}

    echo "Dropping '$db_name'..."

    mysql -u"$user" -p"$pass" "drop database if exists $db_name;"
    # The other way:
    # mysqladmin -u"$user" -p"$pass" drop "$db_name"
done

相关内容