在sqlite中使用Bash变量

在sqlite中使用Bash变量,sql,bash,sqlite,Sql,Bash,Sqlite,谢谢你花时间看这个。 我最近开始在Bash中编写脚本,并希望编写一个小脚本,根据所选的参数,将用户输入写入sqlite数据库。我完全被卡住了,如果你有一分钟和一个想法,如果你回答这个问题,我将非常感激。 我的代码目前看起来像这样: #!/bin/bash ### checking if database is availibe etc. ## ... if [ $# -gt 0 ] case $1 in "--add") case $2 in

谢谢你花时间看这个。 我最近开始在Bash中编写脚本,并希望编写一个小脚本,根据所选的参数,将用户输入写入sqlite数据库。我完全被卡住了,如果你有一分钟和一个想法,如果你回答这个问题,我将非常感激。 我的代码目前看起来像这样:

#!/bin/bash
### checking if database is availibe etc.
## ...

if [ $# -gt 0 ]
  case $1 in
    "--add")
         case $2 in
             "-t") 
                 sqlite3 DatabaseFile <<'END_SQL'
                    INSERT INTO databasenaem (tablename) ($3);
                 END_SQL
#           ....          

         esac
     "--change")
        sqlite3 DatabaseFile <<'END_SQL'
           UPDATE tablename SET tablename=$3 where ID=3;
        END_SQL
esac
#/bin/bash
###检查数据库是否可用等。
## ...
如果[$#-gt 0]
每箱1元
“--添加”)
案件二元
“-t”)

sqlite3 DatabaseFile很难提供完整的答案,因为数据库中的表的结构没有列出,并且没有用于复制问题的样本数据

由于可用信息很少,有两个可能的问题:

  • 从SQL语句来看,注入的参数似乎是字符串。您必须引用它们才能创建有效的sql
  • 代码使用引号作为“here document”分隔符。这将禁用展开$3和friends所需的参数subdivision
此外,请检查拼写(例如,“databasename”)

考虑以下几点

sqlite3 DatabaseFile <<END_SQL
    INSERT INTO databasenaem (tablename) ('$3');
END_SQL

...

sqlite3 DatabaseFile <<END_SQL
    UPDATE tablename SET tablename='$3' where ID=3;
END_SQL

sqlite3数据库文件请首先在粘贴您的脚本,并尝试实现那里提出的建议。非常感谢您的提示,我会做的。这里的代码不是我的完整脚本,因为它更像是一个bash-to-sql问题,我只发布了我认为在这种情况下会感兴趣的内容。非常感谢您的回答。我用“”试过了,但我得到的唯一一件事是,它在桌子上的价值只有区区3美元。拼写错误发生在我试图缩短代码时,因此这里没有太多行。如果有帮助的话,我可以发布整个代码,你可以提供准确的输入来复制问题。在我的机器上,使用未加引号的END_SQL,$3被它的值替换。很抱歉,第8层出现问题。忘记了取消END_SQL的引号,只是加了引号“$3”-现在可以正常工作了。非常感谢您,祝您度过愉快的一天:)