我正在尝试创建一个 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
。
答案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