在bash中测试返回值

时间:2013-12-12 10:32:41

标签: bash postgresql

我正在尝试编写一个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" ],但它给出了相同的结果。我做错了什么?

编辑 psql -lpsql -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
$

2 个答案:

答案 0 :(得分:3)

如果你只是想测试grep是否找到了什么,你应该使用

if psql -l | grep -q mydb
then
  …

答案 1 :(得分:2)

您提到的问题包括不需要多个管道的替代方案,看起来更简单。

你可以说:

( createdb mydb || { echo "creating.." ; false; } ) && echo "database exists"

这基本上相当于说:

if ! createdb mydb; then
  echo "Creating database";
else
  echo "Database exists"
fi