【发布时间】:2013-12-12 10:32:40
【问题描述】:
我正在尝试编写一个 bash 脚本来创建和设置一个 postgres 数据库(如果它尚不存在)。在this 之后,我已经到了这个脚本:
if [ `psql -l | grep mydb | wc -l` -eq 1]
then
echo "Database exists"
else:
echo "Creating database"
...
fi
但无论数据库是否存在,它总是返回"Database exists"。我也试过[ "` psql -l | grep mydb | wc`" == "1" ],但它给出了相同的结果。我做错了什么?
EDITpsql -l和psql -l | grep mydb的输出是:
$ psql -l
List of databases
Name | Owner | Encoding | Collate | Ctype | Access privileges
------------+--------------+----------+-------------+-------------+-----------------------
geoserver | adminhgv7rj4 | UTF8 | en_US.UTF-8 | en_US.UTF-8 |
postgres | postgres | UTF8 | en_US.UTF-8 | en_US.UTF-8 |
project_db | gis_group | UTF8 | en_US.UTF-8 | en_US.UTF-8 |
template0 | postgres | UTF8 | en_US.UTF-8 | en_US.UTF-8 | =c/postgres +
| | | | | postgres=CTc/postgres
template1 | postgres | UTF8 | en_US.UTF-8 | en_US.UTF-8 | =c/postgres +
| | | | | postgres=CTc/postgres
(6 rows)
$ psql -l | grep mydb
$
【问题讨论】:
-
psql -l的输出是什么?还有psql -l | grep mydb? -
如果你只是想测试
grep是否发现了什么,你应该使用if psql -l | grep -q mydb; then …。 -
@fedorqui 我已经手动运行这些以确保它们提供正确的输出。
psql -l | grep mydb | wc -l的输出是0。如果我手动创建数据库,它是1,如果我放弃它,它会返回到0。 -
你有一个奇怪的
grep,如果它在给定选项-q(安静)时打印任何东西。你真的给过这个选择吗? -
但是
psql -l | grep mydb单独的输出是什么?只是psql -l?
标签: bash postgresql