쉘 스크립트란 무엇인가?
우리는 쉘을 이용해서 하나만의 명령을 지정할 수 있지만 여러개의 명령을 순차적으로 실행하는것을 통해서 하나의 업무를 진행할 수 있다. 순차적으로 명령을 실행해야 하는 것을 어딘가에 작성한 후 추후에 재사용할 수 있도록 하는 것이다.
또한 6개월 ~ 1년사이에 한번씩 사용하지만 매우 복잡한 코드거나 하나라도 오타가 나면 안될 경우 역시 쉘 스크립트를 사용하는 것이 안전하고, 사용자에게 편의를 준다.
쉘 스크립트 실습
먼저 우리는 간단한 실습을 위해 script라는 디렉토리를 만든 다음 script 디렉토리로 이동 해 주었다. 우리는 .log으로 끝나는 파일들을 정기적으로 bak 이라는 디렉토리로 백업을 시키려고 한다.
먼저 쉘 스크립트가 아닌 명령어를 통해서 실행해보도록 하자.
먼저 touch 명령어를 이용해서 a,b,c 라는 로그 폴더를 만든다.
그 후 bak이라는 디렉토리를 생성해 준다.
그리고 우리는 log 폴더를 복사해야 하므로 cp(copy) 명령어를 쓴 후 세 파일의 공통점이 .log 파일이라는 것이므로 에스탈리스크.log 라고 입력한 후 복사할 디렉토리를 입력한다.
ls 명령어를 통해 bak 디렉토리의 내부를 살펴본 결과 세 파일이 잘 복사된 것을 확인할 수 있다.
만약 위의 작업이 한번이 아닌 정기적으로 이루어져야 한다면 그 때 마다 명령어를 사용해서 입력하는 것은 비효율 적이다.
그럼 이제 bash 쉘 스크립트를 만들어 볼 것이다.
먼저 nano 명령어를 통해서 backup이라는 파일을 만들어준다.
가장 먼저 우리가 작성할 것은 #!/bin/bash를 작성한다.
이는 backup이라는 프로그램을 실행시킬때 운영체제는 첫번째 줄에 있는 #! 이라는 기호를 본다. 그 기호 뒤 /bin/bash를 보고 밑에 작성 될 명령어들이 /bin/bash 라는 프로그램을 통해서 해석되어야 한다라는 사실을 알 수 있다.
이것은 약속이다.
그다음 우리가 하려고 하는 일은 만약 현재 디렉토리에 bak이라는 디렉토리가 없다면 만들고 있다면 만들지 않는 것이다.
그리고 그 후 현재 디렉토리에 있는 모든 파일 중 .log로 끝나는 파일을 bak라는 디렉토리로 복사하려고 한다.
그 다음 작성하는 것은 if ! [ -d bak ]; then 이다. 이 문법은 만약 bak이라는 이름을 가진 디렉토리가 존재하지 않는다면 이라는 의미이다.
그 아래줄에 tab키를 누르고 들여쓰기를 해서 mkdir bak 즉 bak이라는 디렉토리가 없으면 bak이라는 디렉토리를 생성해라 라는 의미이다.
fi는 if의 반대로 만약 디렉토리가 존재한다면 이라는 의미이며
마지막 cp *.log bak은 .log로 끝나는 모든 파일을 bak으로 복사해라 라는 의미이다. 작성을 완료한 후 저장해 준다.
저장한 후 ls -l을 통해 디렉토리의 내부를 살펴본 결과 backup이라는 파일이 만들어 진 것을 알 수 있다.
backup을 실행시키기 위해서 ./backup을 통해서 실행시켰지만 실행이 되지 않는다.
그 이유는 현재 backup이라는 파일에 실행 권한이 없기 때문이다. 위에 backup을 보면 rw rw r만 존재하기 때문에 실행 권한이 없다.
우리는 chmod 명령어를 통해서 backup 파일에 x 즉 실행 권한을 넣어준다.
그리고 다시한번 ls명령어를 통해서 살펴보니 rwxrwxr-x로 x 권한이 들어간 것을 확인할 수 있다.
그 후 우리는 먼저 bak 파일을 삭제한 후 ls 명령어를 통해 bak 디렉토리가 잘 지워진 것을 볼 수 있었다.
그 후 ./backup을 통해 쉘 스크립트를 실행시키고 ls 명령어를 사용했다.
그러자 bak 디렉토리가 잘 생성된 것을 확인할 수 있었고 bak 디렉토리 안에는 a,b,c의 로그파일이 존재하는 것을 확인할 수 있었다.
마지막으로 bak 디렉토리 안 c.log 파일을 지훈 후 다시한번 쉘 스크립트를 실행한다.
그리고 ls명령어를 사용하자 c.log까지 다시 잘 복사된 것을 확인할 수 있었다.
출처
https://opentutorials.org/course/2598/14204
'[Linux]' 카테고리의 다른 글
[linux] [따배셸] Bash Shell의 변수 (0) | 2023.01.10 |
---|---|
[linux] crontab이란 무엇인가? (0) | 2023.01.09 |
[Linux 기초] 쉘과 커널 (0) | 2022.12.14 |
[Linux 기초] 왜 CLI를 사용하는 것인가? (0) | 2022.12.11 |
[Linux 기초] 다운로드 방법 (wget, git) (0) | 2022.12.11 |