Я пытаюсь написать сценарий 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
$
Что такое вывод 'psql -l'? И 'psql -l | grep mydb'? – fedorqui
Если вы просто хотите проверить, нашел ли этот 'grep' что-то или нет, вы должны использовать' if psql -l | grep -q mydb; затем ... '. – Alfe
@fedorqui Я запустил их вручную, чтобы убедиться, что они дают правильный результат. Выход из 'psql -l | grep mydb | wc -l' является '0'. Если я вручную создаю базу данных, она будет '1', и если я ее опустил, она вернется к' 0'. – aquavitae