![쉘 스크립트에서 sqlite 명령을 작성하는 방법은 무엇입니까?](https://linux55.com/image/124768/%EC%89%98%20%EC%8A%A4%ED%81%AC%EB%A6%BD%ED%8A%B8%EC%97%90%EC%84%9C%20sqlite%20%EB%AA%85%EB%A0%B9%EC%9D%84%20%EC%9E%91%EC%84%B1%ED%95%98%EB%8A%94%20%EB%B0%A9%EB%B2%95%EC%9D%80%20%EB%AC%B4%EC%97%87%EC%9E%85%EB%8B%88%EA%B9%8C%3F.png)
먼저 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
.