rilascia database via bash con trattino nel nome database


-1

Ho una variabile in uno script con l'elenco dei nomi delle cartelle con trattino nei loro nomi

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

E voglio eliminare ogni database con gli stessi nomi con le cartelle nella variabile "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

Ma questo errore è emerso dopo aver eseguito lo script

mysqladmin: Comando sconosciuto: 'elimina database se esiste nome_cartella SET DI CARATTERI utf8 COLLAT'

Come posso eliminare questi database usando lo script? Per favore aiuto.

Risposte:


2

Prima di tutto, stai mescolando mysqladmine il normale mysql. Il primo non accetta SQL, ma solo comandi personalizzati specifici.

In secondo luogo, interrompere l'analisi dell'output di ls. È possibile utilizzare direttamente i caratteri jolly per ottenere un elenco di file.

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
Utilizzando il nostro sito, riconosci di aver letto e compreso le nostre Informativa sui cookie e Informativa sulla privacy.
Licensed under cc by-sa 3.0 with attribution required.