检查数据库是否存在的 Bash 脚本

检查数据库是否存在的 Bash 脚本

我正在尝试创建一个 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}'逃避不起作用,我已经在外面了""

另一件事是检查结果,可以是ft

答案1

我认为return只接受数值结果。当我将其更改为时,echo我得到与您相同的输出。

使用'\${1}'将传递字符串${1}对于 postgres,使用'${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

相关内容