Rumah > Soal Jawab > teks badan
Saya sedang menskrip migrasi menggunakan skrip bash. Apabila saya cuba membuka pangkalan data melalui pembolehubah dalam skrip bash, nama pangkalan data tidak betul. Saya mendapat ralat berikut "'RROR 1102 (42000): Nama pangkalan data 'pembangunan' salah"
mysql --batch --host=********** --user=**** --password=***** $dbName -e "${fileContents}"
Apabila saya melakukan ini dalam skrip bash, pangkalan data wujud
mysql --batch --host=********** --user=**** --password=***** development -e "${fileContents}"
Kandungan fail berubah ialah skrip pemindahan dalam SQL. Pembolehubah dbName ialah nama pangkalan data.
Saya mendapat nama pangkalan data daripada jadual dalam pangkalan data dengan baris berikut
databaseNames=() shopt -s lastpipe mysql --batch --raw --host=***** --user=**** --password=***** -e 'SELECT database_name FROM users.organisations' | while read dbName guid; do if [ $i -gt 0 ] then databaseNames+=($dbName) fi i=$(($i + 1)) done
Nama dalam tatasusunan pangkalan data nampaknya betul, tetapi saya rasa tatasusunan itu mengacaukan keadaan. Saya mengulangi tatasusunan sebenar seperti berikut.
for dbName in "${databaseNames[@]}" do
P粉7148447432024-01-30 10:57:21
Tatasusunan anda kosong. Anda perlu menukar gelung while kepada
while read dbName guid; do databaseNames+=($dbName) done < <(mysql --batch --raw --host=$host --port=$port --user=$user --password=$password --database="yourdatabase" -e 'SELECT database_name FROM users.organisations;')
Kemudian
for dbName in "${databaseNames[@]}" do echo $dbName mysql --batch --raw --host=$host --port=$port --user=$user --password=$password --database="$dbName" -e '${fileContents};') done