티스토리 뷰

셸 스크립트

셸 스크립트란 bash나 zsh 같은 셸로 실행하는 스크립트의 총칭이다. 셸 작업을 미리 입력해놔서 자동화할 수 있다. bash로 실행하는 스크립트는 맨 첫줄에 #!/bin/bash를 적어 bash 스크립트임을 알린다.

파일실행

실행권한이 없는 파일을 실행하려고 하면 에러가 발생한다. 따라서 해당 파일에 chmod로 실행권한을 부여해야 한다. 또한, 파일을 실행하려면 그 파일이 있는 경로를 제대로 지정해주어야 한다.

./스크립트이름.sh 로 실행 가능하다.

변수선언

=를 기준으로 공백없이 입력하면 변수에 할당이 된다.

지역변수는 local을 붙이면 되고, 전역변수더라도 자식 프로세스에서는 기본적으로 사용불가하다. 변수 앞에 export를 붙여 환경변수로 설정하면 다른 프로세스에서도 사용 가능하다.

✨치환기법

구분 사용법 설명
변수사용 $변수명 또는 ${변수명} 할당된 변수를 변수명으로 사용할 때는 $변수명으로 사용하는데, 범위를 명시하기 위해 ${변수명} 으로도 사용가능하다.
명령어 치환 $(명령어열) 명령어 치환을 하려면 $(명령어열) 으로 사용하면 된다. 명령어열 실행결과(표준출력)의 문자열로 치환된다. 즉, 소괄호 안의 명령어가 먼저 실행되고 그 결과로 치환된다.
$(dirname $(dirname $path))) 등으로 겹쳐서 사용가능하다.
계산결과로 치환 $((계산식)) 계산식의 결과값으로 치환된다.

위치 매개 변수

명령어의 위치 매개로 0이 해당 스크립트 이름, 그 뒤로 1, 2, 3... 순서로 위치 매개 변수로 할당된다.

사용법 설명
$0 실행된 스크립트 이름
$숫자 $1, $2 등의 순서로 가능하며, 10번째 부터는 {}로 감싼다. ${10} 
$* 전체 인자 값
$@ 전체 인자 값(쌍따옴표로변수를 감싸면 $*와 다른 결과가 나온다고함)
$# 매개변수의 총 개수

위치 매개 변수가 아닌 옵션 이름으로도 값을 참조 가능하다. 이 경우 다른 방법으로 매개변수를 받아온다.

특수 매개 변수

사용법 설명
$$ 현재 스크립트의 PID
$? ✨ 직전 명령어, 함수, 스크립트의 종료상태 (0은 정상종료, 그외는 비정상종료)
$! 최근 실행한 백그라운드(비동기) 명령의 PID

 

 

이외에도 예약어로 사용되는 변수들이 있지만, 너무 많아서 필요할 때 찾아서 사용하면 되겠다. 매개변수 확장 방식으로 변수의 값을 조정하여 사용할 수 있으나 이것 또한 너무 많아서 나중에 찾아서 사용하면 되겠다. 

비교연산자

사용법 설명
< -le 보다 작음
> -gt 보다 큼
<= -le 보다 작거나 같음
>= -ge 보다 크거나 같음
!= -ne 같지 않음
== -eq 같음
&& -a 논리 AND
|| -o 논리 OR

배열

1차원 배열만 지원한다. 

# 배열설정
array=("apple" "pear" "banana")

# 배열 값 추가
array[3]="tomato"

# 배열 변수사용
${array[1]}

# 배열복사 grape 값을 추가하여 배열 저장
fruits=(${array[@]} "grape")

조건문

조건문에 들어가는 [ 또한 명령어이므로 [ 다음에 공백이 있어야 한다.

if [ 조건 ]
then
	// 조건을 만족하면 실핻하는 내용
else
	// 조건을 만족하지 않으면 실행하는 내용
fi // 조건문의 종료를 나타냄

case 문의 각 case는 ;; (세미콜론2개)로 구분한다.

case ~ in
  값1) ~가 값1과 같을 때 실행하는 명령어열 ;;
  값2) ~가 값2과 같을 때 실행하는 명령어열 ;;
  값3) ~가 값3과 같을 때 실행하는 명령어열 ;; 
esac // case문의 종료를 나타냄

반복문

for ~ in ~
do
	// 반복문으로 수행할 일
done // 반복문의 종료를 나타냄

for ~ do ~ done 이나 while ~ do ~ done 으로 조건문을 표기한다.

함수선언 및 사용

function이라고 적지 않고 사용하면 된다. 하지만 호출코드가 반드시 함수코드보다 뒤에 있어야 한다.

# 함수선언
hello(){
    echo "안녕"
    echo "Hi"
    echo "잘가"
}

# 함수호출
hello

정리

매번 셸 스크립트 사용 상태까지 가지 못해서 셸 스크립트를 정리해보고 싶었다. 직접 스크립트로 조작하여 사용해 본 적은 아직 없지만, 사용할 수 있을 것 같은 자신감이 생겼다! ⚡

참고자료

만화로 배우는 리숙스 시스템 관리 2

Bash 입문자를 위한 핵심요약 블로그 

입문자를 위한 리눅스/맥 커맨드라인 셸 사용법

'Back-end > CLI' 카테고리의 다른 글

리눅스 기반 CLI 기본 개념과 명령어  (0) 2021.02.04
공지사항
최근에 올라온 글
최근에 달린 댓글
Total
Today
Yesterday
링크
«   2025/02   »
1
2 3 4 5 6 7 8
9 10 11 12 13 14 15
16 17 18 19 20 21 22
23 24 25 26 27 28
글 보관함