我正在尝试编写一个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 -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
$
答案 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