解析postgres导致bash

问题描述 投票:0回答:1

通过运行这行代码:

psql -c "\l" -p 54049

我得到以下结果:

enter image description here

我的问题有点笼统

1-如何在BASH中解析这样的表格

2-这种类型的表叫什么

3-任何学习BASH的培训教程都是艰难的

4-如何将此表解析为数组的数组,以便每一行都是一个数组,每个元素都作为列?

主要问题:我想将我的手动输入与此表进行比较,因此如果我的输入数据库名称存在于结果中,它将继续,否则它将再次出现。

这是不起作用的代码:

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
bash postgresql psql
1个回答
2
投票

不解析\l metacommand的输出,更好地使用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. 这不是表 - 它是select查询的返回
  3. 请从任何阅读开始,例如http://tldp.orgpsql
  4. 太多无意义的工作,请考虑上面的例子
© www.soinside.com 2019 - 2024. All rights reserved.