쉘 스크립트 만들기
- 실습 환경: CentOS7 (기본 쉘이 bash가 아닐 경우 변경하는 방법)
- 스크립트 파일을 만들 때는 일반적으로
.sh
확장자를 사용한다.
- 시작 부분에
#!/bin/bash
를 붙여 해당 파일이 쉘 스크립트라는 것을 알려준다.
- 계속해서 실행하고자 하는 명령어들을 입력하고 저장 후 빠져나온다.
sh 명령어를 사용하여 실행하기
- sh 명령어와 생성한 쉘 스크립트 파일명을 입력해 실행한다.
chmod 명령어 사용하여 실행하기
- 생성한 쉘 스크립트 파일에 실행 권한을 주고, 직접 쉘 스크립트를 실행하는 방법
+x
: 모든 사용자(소유자, 그룹, 기타 사용자)에게 실행 권한 부여
다른 방법으로 실행하기
- 일단 다른 스크립트 언어와는 다르게 명령어와 함께 프롬프트에서도 다음과 같이 바로 실행할 수 있다.
- 하지만 쉘 스크립트를 파일로 만들어 사용하는 이유는 계속해서 재사용 할 수 있고 다른 쉘 스크립트를 만들 때 참조할 수 있기 때문임을 기억해야 한다.
변수 사용하기
- 쉘 스크립트를 개발할 때, 특정 명령어를 실행한 결과값을 이용하여 또 다른 명령어를 실행해야 할 경우가 종종 발생한다. 이런 경우 변수를 활용하면 좋다.
변수 선언
- 쉘 스크립트의 경우 특별한, 변수 타입이 필요하지 않다.
- 기본적인 변수 선언 방법은 사용하고자 하는 명령어 전에 변수를 선언하고, 해당 변수에 필요한 값을 저장하면 된다.
예제1) 기본 변수 선언 - 문자열 출력하기
- 변수를 선언하고, 값을 저장한다.
- 앞에서 선언한 변수를 다음과 같이 echo 문자열 옆에 입력한다.
예제2) 기본 변수 선언 - 디렉터리 생성하기
- 변수를 선언하고, 생성할 디렉터리명을 차례대로 문자열에 저장한다.
- 디렉터리를 생성하는 mkdir 명령어 입력 후 앞서 선언한 변수명을 $와 함께 입력한다.
변수의 종류
함수
- 함수는 특정 동작이나 목적을 위해 만들어졌다.
- 함수는 스크립트 재사용을 위해 사용한다.
- 함수 작성은 function이라는 단어로 시작하며, 어떤 동작을 위한 함수인지를 나타내는 함수명 뒤에 소괄호
()
를 붙여준다.
- 그 다음 중괄호
{}
를 붙여 함수의 시작과 끝을 알린다.
- 함수를 사용할 때는 함수에 필요한 파라미터와 함께 해당 함수를 호출한다.
전역 변수
- 스크립트 전체에서 변수에 저장한 값을 사용할 수 있는 변수
- 위 예제처럼 함수가 선언 되기 전, 함수 밖에서 선언된 변수($language)의 값이 함수 내에서도 유효한 것을 알 수 있다.
지역 변수
- 함수 내에서만 변수에 저장된 값이 유효한 변수
- 위 예제에서 myshell.sh를 실행하였을 때 알 수 있는 결과는 다음과 같다.
1. learn 함수의 출력 결과가 알맞게 보여진다.
2. print $language의 결과로 전역 변수의 값인 Korean이 정상 출력되었다.
3. print $learn_language의 결과가 출력되지 않는 이유는 해당 local 함수 밖에서 실행되었기 때문이다.
예약변수 및 환경변수
- HOME: 사용자의 홈 디렉터리
- PATH: 명령어나 쉘 실행 시 실행 파일 디렉터리 경로
- 이 밖에도 FUNCNAME, LANG, PWD, TERM, SHELL, USER, USERNAME 등 시스템을 위해 사전에 미리 사용하고 있는 예약변수들이 존재한다.
위치 매개변수
- 위치 매개변수란 스크립트 수행 시 함께 넘어오는 파라미터다.
- `$0, $1, $*, $@, $#
- 위 예제에서 mylanguage.sh를 실행하였을 때 알 수 있는 결과는 다음과 같다.
1. $0은 실행한 쉘 스크립트의 파일명이 출력되었다.
2. $1, $2는 쉘 스크립트와 함께 넘긴 파라미터 Korean과 English가 순서대로 출력되었다.
3. $*와 $@의 출력 결과 값이 같다.
4. $#은 파라미터의 개수가 출력되었다.
$*과 $@의 차이
- 전체 인자 값이 출력된다는 점은 같지만, 큰따옴표
""
사용 여부에 따라 결과값이 달라진다.
특수 매개변수
- 현재 실행중인 스크립트나 명령어의 프로세스 ID를 확인하거나 바로 앞에서 실행한 명령어나 함수 또는 스크립트 실행이 정상적으로 수행되었는지 여부를 확인할 수 있는 변수
- $$, $?, $!, %-
매개변수 확장
기본 변수 사용법
- $ 뒤에 선언한 변수명을 입력함으로써 변수를 사용할 수 있지만, 문자열과 문자열 사이에 외부로부터 입력받은 값을 치환하기 위해 변수를 사용할 경우 $와 함께 중괄호
{}
를 같이 사용하면 시스템이 쉽게 변수명을 인식할 수 있다.
변수를 초기화(할당, 치환)하기 위한 확장 변경자
- %{변수-문자열}, ${변수:-문자열}, ${변수=문자열}, ${변수:=문자열}, ${변수+문자열}, ${변수:+문자열}, ${변수?에러메시지}, ${변수:?에러메시지}, ${변수:시작위치}, ${변수:시작위치:길이}
변수의 문자열 값을 변경하기 위한 매개변수 확장자
- ${변수#패턴}, ${변수##패턴}, ${변수%패턴}, ${변수%%패턴}, ${#변수}, ${변수/찾을문자열/바꿀문자열}, ${변수/#찾을문자열/바꿀문자열}, ${변수/%찾을문자열/바꿀문자열}
📌 장현정 지음, 『처음 배우는 셸 스크립트』, 한빛미디어(2021)