bash 脚本中的非交互式 SQLite3 使用

问题描述 投票:0回答:4

我看到很多示例展示如何使用 sqlite3 交互式 shell,例如:

$ sqlite3
$ sqlite3> SELECT * from x;

但我正在寻找一种使用 bash 脚本(又名非交互式)在 SQLite3 数据库中创建表的方法。

例如,以下不起作用似乎有效(将最后2个字符与接受的答案进行比较),它仍然是交互式

#!/bin/bash
sqlite3 test.db  "create table n (id INTEGER PRIMARY KEY,f TEXT,l TEXT);"
sqlite3 test.db  "insert into n (f,l) values ('john','smith');"
sqlite3 test.db  "select * from n";
bash sqlite
4个回答
33
投票

看起来很简单

#!/bin/bash
sqlite3 test.db  "create table n (id INTEGER PRIMARY KEY,f TEXT,l TEXT);"
sqlite3 test.db  "insert into n (f,l) values ('john','smith');"
sqlite3 test.db  "select * from n;"

(最后 2 个字符交换) 来自 https://mailliststock.wordpress.com/2007/03/01/sqlite-examples-with-bash-perl-and-python/


30
投票

虽然上面的方法应该有效,但我认为最好不要多次调用 sqlite3,因此我认为以下方法更可取:

#!/bin/sh
sqlite3 test.db <<EOF
create table n (id INTEGER PRIMARY KEY,f TEXT,l TEXT);
insert into n (f,l) values ('john','smith');
select * from n;
EOF

请注意,除非您真的需要使用bash,否则出于可移植性的原因,您应该更喜欢“/bin/sh”作为您的shebang。


12
投票

您可以使用 -batch 选项禁用交互模式:

sqlite3 -batch test.db "create table n (id INTEGER PRIMARY KEY,f TEXT,l TEXT);"

4
投票

这个也有效

sqlite3 "${DB_FILE_NAME}" < data_model.sql
sqlite3 "${DB_FILE_NAME}" < dml.sql
© www.soinside.com 2019 - 2024. All rights reserved.