2015-02-10 61 views
0

我希望能够通过简单地运行一个新的值作为参数的脚本来更新数据库字段。如何使用参数从bash脚本运行SQL更新字符串?

ie> ./update.sh newvalue

,并把它与 “NEWVALUE” 更新小区运行SQL。

目前我打开数据库连接,并在此SQL执行更新粘贴。

UPDATE modules_config_x_roomtypes SET value = 'newvalue' WHERE modules_config_id = (SELECT id FROM modules_config WHERE module_id = (SELECT id FROM modules WHERE name = 'system') AND name = 'theme'); 
+0

您是否检查过'psql'的Postgres文档?在这里:HTTP://www.postgresql.org/docs/current/static/app-psql.html – 2015-02-10 18:06:47

回答

3

像这样简单的事情似乎会起作用,除非我误解了需求。注意我没有psql,所以不能给你一个确切的解决方案,而是一个指南。

#!/bin/bash 

if [ $# -lt 1 ] 
    then 
    echo "USAGE: ./update.sh [newvalue]" 
    echo "  [newvalue] represents the new value to insert into the DB." 
    exit 
fi 

NEWVAL=$(echo $1 | sed "s/'/\\\'/g") 
SQL="UPDATE modules_config_x_roomtypes SET value = '"$NEWVAL"' WHERE modules_config_id = (SELECT id FROM modules_config WHERE module_id = (SELECT id FROM modules WHERE name = 'system') AND name = 'theme');" 
echo "$SQL" | mysql --user=user --password=password 

这首先确保你有一个说法,然后逃脱它的任何单引号,因此不破的SQL语句,然后回显是在SQL到MySQL。您必须修改用户并按要求传递或从其他文件中获取源代码。

如果您需要插入一张空白的“”将工作作为ARG但这并不处理空。

你可能还需要添加一个检查sql语句退出代码,以确保更新了干净。这只是一个简单的如果是$ ?,但由于这不完全在问题的上下文中,我将其留作练习来完成。

我没有运行psql,所以我不能说确切的参数需要这个工作在那里,但从手册页你可以给选项-c指定一个命令来运行,所以你可能会用这个替换回声给mysql,你也必须处理让脚本连接到数据库,但是这里有很多Q.

+0

真棒谢谢@zzevannn,这个伟大的工作用psql,我刚添加的数据库信息,以结束 '回声“ $ SQL“| psql wrkdb -U postgres' – Drew 2015-02-11 16:46:55

+0

很高兴帮助=) – zzevannn 2015-02-11 18:51:17