如何使用参数从 bash 脚本 运行 SQL 更新字符串?

How to run an SQL Update string from bash script with parameter?

我希望能够通过 运行将新值作为参数的脚本简单地更新数据库字段。

ie> ./update.sh newvalue

并让它 运行 一个 sql 与 "newvalue" 更新单元格。

目前我打开数据库连接并粘贴此 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');

像这样简单的事情似乎可行,除非我误解了需求。请注意,我没有 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  | 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 工作,但这不处理 null。

您可能还想添加对 sqls 退出代码的检查,以确保更新顺利进行。这只是一些简单的 if 和 $?,但由于这不完全在问题的上下文中,我将把它作为练习留给你完成。

我不是 运行ning psql 所以我不能说出它在那里工作所需的确切参数,但是从手册页你可以给选项 -c 来指定一个命令到 运行,所以您可能会用它替换对 mysql 的回显,并且您还必须处理让脚本连接到数据库的问题,但是这里有很多问题。