2012-02-10 60 views
1
排除

(對不起,我英文不好)所有MySQL表通過猛砸

我要選擇我的MySQL數據庫所有的表名,但不包括2個表,然後在bash這些數據工作...

但是當我嘗試這些代碼時,有一種逃避問題,我認爲,是否有任何其他的可能性來執行查詢並在DBS變量中捕獲其輸出?

#/bin/bash 
MYSQL_USER=root 
MYSQL_PASS=toor 

DBS="$(mysql -u$MYSQL_USER -p$MYSQL_PASS -Bse 'SELECT SCHEMA_NAME AS Database FROM INFORMATION_SCHEMA.SCHEMATA WHERE SCHEMA_NAME NOT IN('mysql', 'information_schema');')" 

回答

2

嘗試存儲SQL字符串到它自己的變量,並呼應的是到mysql客戶端:

#/bin/bash 
MYSQL_USER=root 
MYSQL_PASS=toor 

SQL_STRING="SELECT SCHEMA_NAME AS db FROM information_schema.SCHEMATA WHERE SCHEMA_NAME NOT IN ('mysql', 'information_schema');" 
# Pipe the SQL into mysql 
DBS=$(echo $SQL_STRING | mysql -u$MYSQL_USER -p$MYSQL_PASS -Bs) 

# Display your result 
echo $DBS 

注意,我也改變了AS DatabaseAS db因爲DATABASE是一個MySQL保留關鍵字這將必須包含在反引號中。我不想惹惱那些在Bash中正確逃脫的人....只是使用不同的別名更容易。

+0

謝謝,幫了很多。這個別名在這個地方並不重要 – ohartl 2012-02-10 17:36:44

0

您不能在單引號字符串中嵌入單引號。請嘗試:

DBS="$(mysql -u$MYSQL_USER -p$MYSQL_PASS -Bse "SELECT SCHEMA_NAME AS Database FROM INFORMATION_SCHEMA.SCHEMATA WHERE SCHEMA_NAME NOT IN('mysql', 'information_schema');")" 

「內部」雙引號是可以的,因爲括號表示新的子shell。

+0

試過那個,但是得到了一些Error的 – ohartl 2012-02-10 17:41:40

+0

@zirrka,比如......?細節很重要。 – 2012-02-10 19:26:54