如何获取用户输入并将其应用于bash中的sql语句?

时间:2015-06-22 13:59:15

标签: sql sql-server bash putty

我有两个脚本。一个名为sqlscript.sql,另一个名为script.sh我需要在我的sql脚本中编写所有需要的查询。它们只是一堆更新语句。例如:

UPDATE xxDev.SYS_PARAMS SET val = 'serverName' WHERE lower(name) = 'enginebaseurl';

我在.sh脚本中运行.sql脚本。当.sh脚本运行时,我希望它提示用户输入服务器名称并获取该用户输入并在sql语句中将其替换为serverName

我对bash脚本和本网站都是全新的,所以我希望我能提出这个问题。我正在使用PuTTY,如果这有所不同。

3 个答案:

答案 0 :(得分:0)

我可能会使用变量

set @val 'serverName'
UPDATE xxDev.SYS_PARAMS SET val = @val WHERE lower(name) = 'enginebaseurl';

您可以将sqlscript.sql拆分为

设置-val.sql

    set @val 'serverName'

和实际的更新语句。然后,您可以从用户输入中重新创建set-val.sql

echo -n "enter server: "
read server
echo "set @val '$server' > set-val.sql

然后将两个文件转发到mysql:

cat set-val.sql sqlscript.sql | mysql 

你应该只将它用于内部事物,它似乎有点脆弱。

答案 1 :(得分:0)

假设您使用MySQL,尝试类似:

# TODO: prompt user for server name and store it into variable serverName
serverName="get from user"

cat <<"EOF" | mysql -u user1 -p passwd -h server1 -P 3306 -D db1
UPDATE xxDev.SYS_PARAMS SET val = '$serverName' WHERE lower(name) = 'enginebaseurl';
EOF

因此,在此示例中,您将sql脚本嵌入到.sh中,这样就不必维护两个文件。

答案 2 :(得分:0)

我想让你弄清楚如何将shell参数传递给你的sql命令,但这是一种非常酷的方式来查询用户的服务器名称。 可能甚至可以与POSIX兼容。

#!/bin/sh
echo -n "Hit me with that server name: "; read serverName
echo "${serverName}! Outstanding! Pick up \$200 when you pass Go!"