쉘 스크립트에서 sqlite 명령을 작성하는 방법은 무엇입니까?

쉘 스크립트에서 sqlite 명령을 작성하는 방법은 무엇입니까?

먼저 sqlite를 연 다음 테이블을 복사하고 마지막으로 테이블의 내용을 삭제하는 쉘 스크립트를 작성하고 싶습니다. 쉘 스크립트에서 이 작업을 어떻게 수행할 수 있습니까?

>>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.

관련 정보