我正在尝试创建一个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
。
我认为return
只接受数字结果。当我将其更改为时,echo
我得到与您相同的输出。
Using'\${1}'
会将字符串${1}传递给 postgres,使用'${1}'
or '$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
本文收集自互联网,转载请注明来源。
如有侵权,请联系 [email protected] 删除。
我来说两句