在sqlite中使用Bash变量
谢谢你花时间看这个。 我最近开始在Bash中编写脚本,并希望编写一个小脚本,根据所选的参数,将用户输入写入sqlite数据库。我完全被卡住了,如果你有一分钟和一个想法,如果你回答这个问题,我将非常感激。 我的代码目前看起来像这样:在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
#!/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”-现在可以正常工作了。非常感谢您,祝您度过愉快的一天:)