我看到很多示例展示如何使用 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";
看起来很简单
#!/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/
虽然上面的方法应该有效,但我认为最好不要多次调用 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。
您可以使用 -batch 选项禁用交互模式:
sqlite3 -batch test.db "create table n (id INTEGER PRIMARY KEY,f TEXT,l TEXT);"
这个也有效
sqlite3 "${DB_FILE_NAME}" < data_model.sql
sqlite3 "${DB_FILE_NAME}" < dml.sql