[英]Using 2 arrays in a bash loop to query mysql from the command line
我已經閱讀了許多相關文章,即使嘗試了推薦的示例,也仍然無法解決。
我有2個數組:
1)包含不同數據庫(db)名稱的數組
echo "${ARRAY_DB[*]}"
db1 db2 db3
2)一個數組,其中包含每個數據庫的關聯表名
echo "${ARRAY_TABLE[*]}"
table1 table2 table3
對於每個數據庫,所有表都具有相同的列名稱結構。
另外,兩個數組的順序是這樣的,我知道table1在db1中,而table2在db2中,依此類推。
我想循環查詢mysql,並從每個db-table配對中拉出幾列。
僅使用一個數組,我可以通過僅將數組用於表來成功循環。 在下面的示例中,我僅使用數據庫名稱“ db4”而不是數據庫數組。 本質上,我想用數據庫數組替換靜態“ db4”。
因此,使用靜態db而不是db數組,可以正常工作:
for i in "{$ARRAY_TRACK[@]}" ; do mysqlshortcut -e "select col1,col2,col3 from "$i" order by rand() limit 1 ;" db4 ; done
從概念上講,這是我需要做的:
for i in "{$ARRAY_TRACK[@]}" ; do mysqlshortcut -e "select col1,col2,col3 from "$i" order by rand() limit 1 ;" "{$ARRAY_DB[@]}" ; done
這將導致以下一行一行地逐步增加每個數組中的下一個表和關聯的db,直到數組中的所有項目完成循環為止。 現在,讓我們說每個數組中有3個項目(這2個數組中的db-to-tables將始終正確配對和排序)。
做mysqlshortcut -e“按rand()限制1從table1的順序選擇col1,col2,col3;” db1
做mysqlshortcut -e“按rand()限制1從table2順序選擇col1,col2,col3;” db2
做mysqlshortcut -e“按rand()限制1從table3順序選擇col1,col2,col3;” db3
完成上述循環后,我的結果將如下所示:
col1 col2 col3
db1.table1 x x x
db2.table2 y y y
db3.table3 z z z
實際上,我可以使用兩個數組進行一個簡單的循環,如下所示:
for ((i=0;i<${#ARRAY_DB[@]};++i)); do printf "%s is in %s\n" "${ARRAY_TABLE[i]}" "${ARRAY_DB[i]}" ; done
效果不錯:
table1 is in db1
table2 is in db2
table3 is in db3
我試圖采用這種方法(上述)並將其應用於sql查詢(在下面的示例中),但是它不起作用,而且我認為我沒有正確構建它。 我有種感覺,就是我可能不理解引號。
for ((i=0;i<${#ARRAY_DB[@]};++i)); do mysqlshortcut -e "select col1,col2,col3 from "%s";" %s "${ARRAY_DB[i]}" "${ARRAY_TRACK[i]}" ; done
有什么建議或其他方法嗎? 我是bash腳本的新手,並且是數組的新手。
非常感謝您的任何建議!
'%s'是printf
指定符,請嘗試使用實際的數組表達式:
mysqlshortcut -e "select col1,col2,col3 from ${ARRAY_DB[i]}; ${ARRAY_TRACK[i]}"
或使用printf:
mysqlshortcut -e $(printf 'select col1,col2,col3 from %s; %s' "${ARRAY_DB[i]}" "${ARRAY_TRACK[i]}")
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.