Script?

Parker.Park·2022년 8월 18일
0

개념

목록 보기
11/16

Script? Shell Script라고 하며, Linux기반 프로그래밍 정도로 이해할 수 있다. shell에서의 명령어들을 프로그래밍처럼 실행하거나 어떤 조건일 경우 발동하는 등의 파일이라고 볼 수 있다. 이전에 shell에 대해서 알아봐야 할 것이다.

Shell?

그림 출처 : Wikimedia Commons

위에 그림과 같이 중간에 우리가 아는 CPU, RAM, SSD와 같은hardware가 있다면 다음층은 `Kernel`이라는 층이 있는데 `kernel`은 하드웨어를 직접적으로 제어하는 역할을 한다. 그 다음 `Shell`은 사용자와 혹은 application에서 입력받은 명령어를 해석해서 kernel에 전달을 해주고 kernel 결과값을 다시 사용자에게 전달하는 역할을 하는 것이다. 대표적인 `Shell`로는 `bash`와 `zsh`가 있다. 이 둘의 명령어가 편의에 의해서 살짝 다르다고 하니 참고 바란다. 터미널에 들어가 현재 사용하는 shell을 알기 위해서는 다음과 같은 명령어를 쓰면 알 수 있다.
% echo $0
-zsh

shell을 통해 명령어는 자주 사용하는 "ls -al, pwd"외에도 정말 많다!
아래는 몇 가지 리눅스 명령어를 정리해 놓은 것이다. 참고하도록 하자.
[220712 TIL : 몇 가지 리눅스 명령어 정리]

Shell Script

위 에서 얘기한 shell 명령어들을 어떻게 script를 하는지에대해서 알아보자. 우선 shell로 들어가서 연습할 폴더를 만들어보자 그리고 그 폴더에 a.log, b.log, c.log라는 파일들을 만들어 보자.
a, b, c 세 파일을 복사하여 logfolder라는 하위 폴더를 만들고 세 파일에 붙여 넣을 것이다. shell을통해 명령어를 입력하면 다음과 같을 것이다.

# 파일 생성
% touch a.log b.log c.log

# log file을 붙여 넣을 만들 폴더 생성
% mkdir logfolder

# 파일 copy 후 'logfolder'로 붙여넣기 실행
cp *.log logfolder

위 명령어들을 매번 사용한다면 귀찮을 뿐더러 폴더 생성이 기존폴더가 있을 경우 에러가 발생한다.

% mkdir logfolder
mkdir: logfolder: File exists

script파일로 명령어를 로직처럼 작성하여 한번에 실행할 수 있다.

Shebang

Shebang은 스크립트 맨 처음에 온다. 일종의 어느 shell로 인터프리터를 진행 할것인지 결정하는 것이라고 볼 수 있다.

#!/bin/bash
#!/bin/zsh
#원하는 쉘에 종류에 따라 선택하여야 한다.

zsh을 사용하기 때문에 zsh기준으로 작성하겠다.

#!/bin/zsh

어느 페이지에 가보면 "/usr/bin/zsh"로 나와있는데, 절대 경로를 표시하는 것이기에 pc마다 차이가 있을 수 있다 참고하도록 하자.

script 작성

zsh환경이라 파일확장자는 .sh로 만들었으며, 명령어는 vi편집기를 통해서 작성하였다.

#copy.sh

#!/bin/zsh

# start command

echo "Start backup"

if ! [ -d logfolder ]; then
        mkdir logfolder
        echo "create logfloder"
fi

cp *.log logfolder
echo "complete copy log files"

script안에 문법에 대해서는 참조랑이나 아래 링크를 참조 하도록 하자. 여기서는 간단한 예시만 소개하려고 한다.
[Shell Script 문법 정리]

'logfolder'폴더가 없다면 만들어주고, 반대로 있다면 copy만 하는 것으로 작성 하겠다. "#!/bin/zsh" 부터 시작이다. 그리고 "#"은 주석이다.

script 실행 : 권한 주기

이렇게 해서 만든 script파일을 실행시켜주어야 하는데 전체 file 경로로 명령어를 주거나 상대 경로를 통해서 실행할 수 있다.

#상대경로로 실행하기
% ./copy.sh
zsh: permission denied: ./copy.sh

그런데 처음 실행하면 위와같이 실행이 안될것이다. 이것은 리눅스 환경에서 권한을 주어야 실행이 가능하기 때문이다. 정확한 이유는 알아봐야 한다. ㅠ 권한을 주기 위해서는 "chmod"명령어로 줄 수있다. 아래 링크에서 간단하게나마 chmod에 대해서 참고하도록 하자.
[220712 TIL : chmod 명령어 정리]

% ls -l
-rw-r--r--   (...) copy.sh

% chomod 744 copy.sh #or "chmod +x copy.sh"

% ls -l
-rwxr--r--  (...) copy.sh

이렇게 권한을 설정하면 실행할 수 있을 것이다. 권한설정 명령어가 안된다면 앞에 "sudo"를 붙여 보자.
이제 다시 script를 실행해보자.

#"logfolder"가 있을 경우

% ./copy.sh
Start backup
complete copy log files

#"logfolder"가 없을 경우

% ./copy.sh
Start backup
create logfloder
complete copy log files

정말 copy가 되었는지는 "ls" 명령어를 통해서 확인해보길 바란다.

마치면서

처음 알았다면 상당히 당황할 내용일 수도 있지만, 이전에 명령어라도 조금 알아봤다고 크게 어렵지 않게 다가왔다. 물론 shell script가 프로그래밍으로 들어가면 따로 배워야하는 영역이기 때문에 이번에는 맛보기에 만족한다.

참고

[Linux - Shell 1 : intro, 생활코딩 YouTube, 2022년08월24일 접속]
https://youtu.be/HYQ65yUlJDg

[Linux - Shell 2 : bash vs zsh, 생활코딩 YouTube, 2022년08월24일 접속]
https://youtu.be/VNF3BAEIUYs

[Linux - Shell script 1 : intro, 생활코딩 YouTube, 2022년08월24일 접속]
https://youtu.be/cXnVygkAg4I

[Linux - Shell script 2 : example, 생활코딩 YouTube, 2022년08월24일 접속]
https://youtu.be/HZfaBDM3EW0

[Shell Script 문법 정리, DongDongE_Blog, 2022년08월24일 접속]
https://blog.d0ngd0nge.xyz/shell-script/

[How Do I Run a ZSH Script, https://linuxhint.com/, 2022년08월24일 접속]
https://linuxhint.com/run-zsh-script/

profile
개발자준비중

0개의 댓글