【问题标题】:How do I get a user input and apply it in a sql statement in bash?如何获取用户输入并将其应用到 bash 的 sql 语句中?
【发布时间】:2015-09-08 00:25:55
【问题描述】:

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

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

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

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

【问题讨论】:

    标签: sql sql-server bash putty


    【解决方案1】:

    我可能会使用一个变量

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

    你可以将sqlscript.sql拆分成

    set-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 
    

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

    【讨论】:

      【解决方案2】:

      假设您使用 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 中,这样您就不必维护两个文件。

      【讨论】:

        【解决方案3】:

        我将让您弄清楚如何将 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!"
        

        【讨论】:

          猜你喜欢
          • 1970-01-01
          • 1970-01-01
          • 2021-04-29
          • 2019-07-12
          • 1970-01-01
          • 2020-07-09
          • 2021-12-08
          • 1970-01-01
          • 2021-08-17
          相关资源
          最近更新 更多