Сценарий Bash, которые проверяют, существует ли база данных

Я пытаюсь создать сценарий удара, которые проверяют, существует ли база данных (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.

0
задан 13 September 2018 в 01:39

1 ответ

Я думаю 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
3
ответ дан 27 October 2019 в 23:39

Другие вопросы по тегам:

Похожие вопросы: