Я пытаюсь создать сценарий удара, которые проверяют, существует ли база данных (PostgreSQL):
function is_database()
return $(sudo -u postgres psql -c "SELECT exists(SELECT datname FROM pg_catalog.pg_database where datname='\${1}')")
echo database:
read
is_database $REPLY
Я всегда добираюсь (если существуют или не база данных):
exists ------ f (1 row)
Проблема, кажется, '\${1}'
выход не работает, и я уже имею снаружи ""
.
Другая вещь состоит в том, чтобы проверить результаты, может быть f
или t
.
Я думаю return
только принимает числовой результат. Когда я изменяю его на echo
Я получаю тот же вывод как Вы.
Используя '\${1}'
передаст строковый $ {1} пост-ГРЭС, использовать '${1}'
или '$1'
(и надеюсь, что пользователь не вводит некоторый дополнительный SQL для введения...),
Возможно, другой путь без потребности в sudo
должен перечислить базы данных и grep результат:
function is_database() {
psql -lqt | cut -d \| -f 1 | grep -wq $1
}
echo database:
read
if is_database $REPLY
then
echo $REPLY exists
else
echo $REPLY does not exist
fi