如何在shell脚本中编写sqlite命令?

如何在shell脚本中编写sqlite命令?

我想编写一个shell脚本,首先打开sqlite,然后复制一个表,最后删除该表的内容。我怎样才能在 shell 脚本中做到这一点?

>>cd /var/www/dbs
>>sqlite3 ha.db
sqlite>>.timeout 2000
sqlite>>INSERT INTO table1 SELECT * FROM table2;
sqlite>>DELETE * FROM table2;
sqlite>>.quit

这部分怎么写呢?

>>sqlite3 ha.db
sqlite>>INSERT INTO table1 ('a1','a2') VALUES ('1','2');
sqlite>>.quit

答案1

sqlite3从标准输入读取命令,这意味着您可以从文件或命令行向其提供 SQL,而不仅仅是交互方式。sqlite3将在输入结束时自动退出,因此.quit在非交互式使用时不需要。

例如:

#!/bin/sh

sqlite3 /var/www/dbs/ha.db <<'END_SQL'
.timeout 2000
INSERT INTO table1 SELECT * FROM table2;
DELETE FROM table2;
END_SQL

另请注意 的更正语法DELETE

如果还需要table2在数据库中创建:

#!/bin/sh

sqlite3 /var/www/dbs/ha.db <<'END_SQL'
CREATE TABLE IF NOT EXISTS table2 AS SELECT * FROM table1;
INSERT INTO table2 SELECT * FROM table1;
DELETE FROM table1;
END_SQL

如果您需要完全删除(而不仅仅是其内容),请更改DELETE FROM table1;为。DROP table1;table1

答案2

cd /var/www/dbs
echo ".timeout 2000
INSERT INTO table1 SELECT * FROM table2;
DELETE * FROM table2;
.quit" |
    sqlite3 ha.db

这仅在sqlite3从 读取stdin而不是从其读取时才有效tty

相关内容