我想编写一个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
。