shell script

#1. shell

Sila 2022. 12. 10. 21:42

1. shell

개발 과정에서 우리는 자주 터미널에서 shell을 사용해 명령을 입력한다.

 

우리가 다루는 컴퓨터의 구조를 살펴보면 다음 그림과 같다.

 

 

 

 

 

안 쪽에서부터 보면 우선 컴퓨터는 다양한 하드웨어로 이루어져 있다.

 

그 하드웨어에 직접 명령을 내려 어떤 동작을 수행하게 하는 것이 kernel이다.

 

그 kernel(커널)에 사용자는 직접 명령을 전달할 수는 없고 (기계가 알아들을 수 있는 언어를 사람이 직접 만들 수는 없다.)

 

사용자의 명령을 변환해 커널에 전달해 하드웨어가 이를 수행하게끔 그 매개 역할을 해주는 것이 shell이다.

 

명령을 수행한 후, 처리 결과도 하드웨어에서 커널을 거쳐 쉘에게 알려준다.

 

shell은 껍데기, kernel은 코어, 중심이라는 뜻을 가지고 있다.

 

 

쉘은 사용자가 입력한 명령을 해석하는 프로그램이고, 이것이 커널과 분리되어 있기 때문에 쉘도 여러 가지가 존재한다.

 

(js, ts등처럼 약간 다른 언어라고 생각하면 된다.)

 

사용자 입장에선 본인이 선호하는 쉘 (bash, zsh 등..)을 선택해 사용할 수 있다.

 

나는 bash를 기준으로 쉘 스크립트를 공부해보려고 한다.

 

2. shell script

shell에 명령어를 한 번 입력하고 그걸로 볼일이 끝나는 경우는 별로 없다.

 

여러 번 명령어를 순차적으로 입력할 때가 많은데, 몀령어가 길거나 입력 횟수가 많아질수록

 

사용자가 실수를 할 가능성도 높아지고 명령어들을 일일히 입력하는 것이 번거로울 수 있다.

 

그럴 때 사용하는 것이 shell script로, 터미널에 입력할 명령어들을 옵션과 플래그, 변수들까지

 

미리 다 입력한 파일을 만든 다음, 이를 순서까지 맞춰서 실행해줄 수 있다.

 

기초적인 명령어부터 시작해보자.

 

1. ls

ls는 list의 줄임말로 현재 디렉토리에 있는 파일 혹은 폴더들을 리스트를 보여준다.

 

-al flag를 붙이면 권한, 생성/수정 시점, 용량 등 좀 더 자세한 정보를 알려준다.

 

(a, l 각각이 하나의 플래그이므로 순서가 바뀌거나 하나만 사용해도 상관없다.)

 

ls
ls -la

 

1.1 | grep

명령어 실행시 | grep을 붙이고 글자를 입력하면 해당 글자를 포함한 결과물만 필터링해서 보여준다.

 

ls
> bashrc  git  go  go-ethereum  node_modules  package-lock.json  package.json  prac

# |grep을 이용한 출력
ls | grep go
# go를 포함한 것들만 걸러서 보여준다.
> go go-ethereum

 

2. pwd 

pwd는 present working directory의 줄임말로 현재 디렉토리의 절대경로를 알려준다.

 

pwd
# /home/sila/study/shell

 

3. mkdir

make directory의 준말로 옆에 변수를 입력하면 해당 변수명으로 디렉토리를 만들어준다.

mkdir asd
# asd 폴더가 현재 위치에 생성

 

4. touch

touch 명령어는 현재 디렉토리에서 같이 입력해준 파일명(들)을 읽어

 

존재하면 파일을 갱신하고, 없다면 새로 생성한다.

touch a.log, b.log c.log
# a.log, b.log, c.log 파일들 각각이 있는지 확인하고, 있으면 갱신, 없으면 생성한다.

 

5. cp

copy의 줄임말로 선택한 파일을 선택한 경로에 복사할 수 있다.

 

cp *.log copies
# *은 와일드카드, 해당 확장자명을 가진 파일을 전부 지정한다.
# 지정한 파일들을 copies 폴더에 복사한다.

 

6. !!

방금 실행한 명령어를 다시 실행한다.

 

7. cat

파일을 읽어 출력해준다.

 

7.1 head, tail

파일을 읽을때 처음 혹은 마지막 n줄만 읽어준다.

 

# tester.txt의 처음 3줄만 출력해준다.
head -3 tester.txt

# tester.txt의 마지막 2줄을 출력해준다.
tail -2 tester.txt

 

8. >, >>

결과물을 파일에 써준다.

echo "aaaaaaaaa" > test.txt

echo "aaaaaaaaaa" 의 결과물 aaaaaaaa를 text.txt 파일을 생성하고, 그 안에 입력해준다.

 

>>를 쓰면 결과물을 원래 있는 파일에 더 추가해준다.

 

echo "bbbbb" >> text.txt

cat text.txt

# aaaa... 을 하고 바로 bbbb를 실행했다면 둘 다 text.txt에 써져있다.
aaaaaaaa
bbbbb

 

 

3. bash의 설치 경로

마지막으로 이런 shell 프로그램들은 어디에 있는지 알아보자.

 

go언어를 설치할 때 경로를 설정하면 그 경로에 go라는 폴더가 생기고

 

그 안에 go 언어를 구동할 요소들이 들어있었는데, bash도 shell의 하나이고, 하나의 언어인것처럼

 

이 쉘, 여기서는 bash가 설치된 곳이 따로 있다.

 

bash는 컴퓨터의 가장 기본적인 파일들이 있는 곳인 bin 폴더에 있다.

 

wsl 안에서 홈 디렉토리의 bin 폴더로 들어가 ls로 파일들의 리스트를 불러오면

 

다양한 파일들이 있는 것을 확인할 수 있는데, (방금 나열된 cp, ls 심지어 sudo 등도 여기에 있다.)

 

우리가 터미널에 명령어를 입력하면 이 파일들이 실행되어 원하는 동작을 수행하는 것이다.

'shell script' 카테고리의 다른 글

#4 switch-case문, 함수  (0) 2023.01.14
#3 조건문, 반복문  (0) 2022.12.18
#2 변수 선언, 기호  (0) 2022.12.13