2017-04-04 57 views
0

通過運行此行代碼:解析的Postgres導致在bash

psql -c "\l" -p 54049 

我得到以下結果:

enter image description here

我的問題是有點一般BASH

1 - 我該如何解析BASH中的表格

2-這是什麼類型的表稱爲

3-培訓教程任何手腳在艱難地

4-學習BASH,我怎麼能分析該表作爲一個數組的數組,每行會作爲數組和它的每一個元素作爲列?

主要問題: 我想我的手動輸入比較與此表,因此,如果我的輸入數據庫名稱中的結果存在,它將繼續否則將另一回事。

這裏是一個不正常的代碼:

dbsList=`psql -c "\l" -p 54049 | awk '{ print $1 }'` 

echo "Please enter a valid DB name you want to backup:" 
read dbName 

contains() { 
    [[ $1 =~ (^|[[:space:]])"$2"($|[[:space:]]) ]] && echo 0 || echo 1 
} 

contains dbsList dbName 

while [ `contains dbsList dbName` -eq 1 ] 
do 
echo "Please enter a valid DB name you want to backup:" 
read dbName 
done 
+0

更好的例子使用'psql -c'從pg_database「-p 54049'中選擇string_agg(datname,',')作爲列表 –

+0

並簡單回答:不要在bash中執行此操作。使用真正的編程語言,如果你想編寫可維護的代碼 – frlan

+0

我可能會使用python – Vagho

回答

1

不解析\l元命令的輸出,更好地利用select pg_database如:

-bash-4.2$ for i in $(psql -c "select datname from pg_database" -Xt); do echo "you can do logic against $i"; done; 
you can do logic against template1 
you can do logic against template0 
you can do logic against postgres 

,並回答你的問題:

  1. bash不是爲解析而設計的(你可以做到,但問題是要寬)
  2. 這不是一張桌子 - 這是選擇查詢返回
  3. 請,開始有這方面的閱讀,如http://tldp.orgpsql
  4. 太多毫無意義的工作,考慮上述
+0

我同意所有的觀點,這就是爲什麼我想從有經驗的人那裏得到一些材料,這樣我就可以學會做這樣的事情。 – Vagho

+1

我更新了答案,以包含一些bash在線文檔的鏈接。它很短,會給你什麼bash的基本概念以及你如何使用它 –