2017-04-04 3 views
0

の結果:解析のPostgresはこのコード行を実行するとbashの

psql -c "\l" -p 54049 

私は以下の結果取得しています:私の質問は

1ビット汎用BASHある

enter image description here

を - どのようにしてBASHでこのようなテーブルを解析できますか

2このタイプは何ですか?テーブルは、ハードな方法

の4- BASHを学ぶためのトレーニングチュートリアルの

、3-あらゆる手と呼ばれ、各行は配列のようになりますように、どのように私は、配列の配列としてこのテーブルを解析することができ、それぞれその列としての要素は?

主な質問:私は私の入力DB名が結果に存在する場合、したがって、それが再び他の意志他に継続されます。このテーブルで私の手入力を比較したい

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

より良い上記の例を検討し、どの本で読んで、例えばhttp://tldp.orgpsql

  • あまりにも多くの無意味な作業を始めてください'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. 選択クエリの復帰で、
    +0

    私はすべての点に同意したので、私は経験豊富な人からいくつかの材料を望んでいたので私はこのようなことを学ぶことができます。 – Vagho

    +1

    私はbashのオンラインドキュメントへのリンクを含めるように答えを更新しました。これは非常に短く、bashとは何か、そしてどのように使用するのかという基本的な考え方を与えるでしょう –

    関連する問題