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