2013-12-12 8 views
0

Я пытаюсь написать сценарий bash, который создает и настраивает базу данных postgres, если она еще не существует. После this, я попал в этот сценарий:Проверить значение возврата в bash

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" ], но он дает тот же результат. Что я делаю не так?

EDIT Выход 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

Что такое вывод 'psql -l'? И 'psql -l | grep mydb'? – fedorqui

+0

Если вы просто хотите проверить, нашел ли этот 'grep' что-то или нет, вы должны использовать' if psql -l | grep -q mydb; затем ... '. – Alfe

+0

@fedorqui Я запустил их вручную, чтобы убедиться, что они дают правильный результат. Выход из 'psql -l | grep mydb | wc -l' является '0'. Если я вручную создаю базу данных, она будет '1', и если я ее опустил, она вернется к' 0'. – aquavitae

ответ

3

Если вы просто хотите проверить, нашел ли что Grep что-то или нет, вы должны использовать

if psql -l | grep -q mydb 
then 
    … 
2

вопрос называют вами включает в себя варианты, которые не требуют несколько труб, и кажется проще.

Вы могли бы сказать:

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

Это, по существу, эквивалентно говоря:

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

Спасибо за предложение, но у меня есть целый список команд, которые мне нужно запустить, если база данных не существует, и я не могу их полностью обернуть. – aquavitae

+0

@aquavitae Я не уверен, что вы подразумеваете под «Я не могу так их обернуть» - вы можете вставлять несколько операторов в любой из блоков. – devnull

+0

О, вы имеете в виду использовать вторую форму и включить дополнительный код ниже 'echo's. Да, это может сработать! – aquavitae

Смежные вопросы