티스토리 뷰
Ⅰ. 셸 스크립트
ⅰ. 셸 스크립트 만들기
스크립트는 유닉스 명령과 셸이 제공하는 프로그래밍 구문으로 구성된 텍스트 파일로 유닉스의 여러 작업을 손쉽게 실행할 수 있는 도구로 활용되고 그 실행 방법은 두가지이다.
1. $ bash script
2. $ chmod + x script
$ script
ⅱ. 스크립트 파일의 구성요소
- #! 기호
매직 넘버라고 하며, 이 뒤에는 스크립트를 처리할 프로그램(인터프리터)를 지정한다.
커널은 이것을 보고 지정된 프로그램을 실행시키며 스크립트를 해당 인자로 전달한다.
인터프리터를 지정할 때는 옵션을 함께 지정할 수도 있다. 매직 넘버는 항상 스크립트의 첫 행에 있어야 한다.
- 주석
주석은 프로그램에 대한 설명으로 #으로 시작한다. 전체 행 모두를 주석으로 처리할 수도 있고, 스크립트 명령문 다음에 나올 수도 있다. 주
- 셸 명령
셸의 모든 명령은 스크립트의 내용으로 사용할 수 있다.
- 셸 프로그램
셸 스크립트는 유닉스 명령뿐 아니라 각 셸이 제공하는 프로그램을 위한 구문도 사용할 수 있다.
Ⅱ. 셸 변수 사용하기
변수의 값이 문자열일 때 문자열 내에 포함된 패턴을 찾아 일부를 제거할 수 있다.
ⅰ. 변수값 활용하기
변수명 = 값
ⅱ. 셸 변수 문자열 처리하기
ⅲ. 명령행 인자 처리하기
스크립트를 실행할 때 인자로 주어진 값을 스크립트 안에서 처리할 수 있다. 포지션 인자라고 불리는 특수 내장 변수들은, 명령행에 입력된 인자의 순서에 따라 이름이 정해지며 주어진 인자를 저장한다.
ⅳ. 인용 부호 처리하기
- 작은 따옴표('')
- 큰 따옴표("")
- 역 슬래시(\)
ⅴ. 명령 대체
명령의 출력을 변수로 지정하여 사용하는 것이다. 배시 셸을 포함하여 모든 셸을 백 쿼터(')를 사용하여 명령을 대체한다. 백 쿼터는 쌍으로 사용해야 하며, 배시 셸은 전통적 명령 대체 방법인 백 쿼터 외에 콘 셸에서 도입된 명령 대체 방법인 $(명령) 의 형태도 지원한다.
Ⅲ. 사용자로부터 입력 받기
ⅰ. read
셸 내장 명령으로 터미널이나 파일로부터 입력을 받아들인다.
ⅱ. here 문서를 통한 입력 : <<
표준 입력을 사용자로부터 직접 받아들이지 않고 자동으로 처리할때 here 문서를 사용한다.
정상적인 키보트 입력은 EOF 문자(^D)로 종료되지만, 스크립트 파일에서는 EOF 문자를 중간에 사용할 수 없기 때문에 이를 대체할 입력 종료 문자를 별도로 지정한다.
Ⅳ. 연산자
연산자는 프로그램에서 자료를 다양하게 처리하는 방법을 제공
비프 시프트 연산자는 here 문서의 <<와 구분하기 위해 반드시 (()) 사이에 기술하여야 한다.
그리고 (()) 안에서는 저장 연산자(=) 좌우에 공백이 있어도 괜찮지만, let을 쓸 때 공백이 모함되면 ""로 묶어야 한다.
Ⅴ. 제어문
ⅰ. if문
- if ~ else ~ then
- if ~ then ~ elif ~else문
ⅱ. 조건 테스트
ⅲ. case
case 문은 if/elif/else 대신 사용할 수 있는 구문으로 주어진 변수의 값에 따라 실행할 명령을 따로 지정할 수 있다.
변수의 값이 value 1이면 value 1 다음부터 ;;을 만날 때까지 명령을 실행한다.
;;을 만나면 그 다음의 모든 명령을 건너뛰고 esac 키워드 다음의 명령부터 순차적으로 실행한다.
값의 지정에는 패턴을 표현하는 특수기호나 | 연산자를 사용할 수 있다.
만약 일치하는 값이 없으면 기본값인 *다음에 나오는 명령을 실행한다.
ⅳ. for 문
- 외부 파일의 내용 참조
$(file)을 사용하면 file의 내용을 입력 다아서 white space로 그분되는 단어를 한 번에 한 개씩 처리한다. 사용자 이름을 지정하고 있는 list파일에서 이름을 차례로 읽어서 출력하는 스크립트이다.
- 명령행 인자 처리
스크립트 이름과 함께 입력된 명령행 인자는 for 문을 이용해 처리할 수 있다.
ⅴ. while 문
주어진 조건 명령의 실행 결과가 참이면 do와 done 사이의 명령을 반복 실행한다. 루프가 반복될 때마다 조건 명령을 다시 실행하며, 조건 명령의 종료 값이 항상 0이라면 무한 반복을 할 수도 있다.
ⅵ. until 문
until 문은 조건 명령이 정상 실행될 때까지 주어진 명령을 반복 실행한다. while 문과 반복 실행 조건이 반대라는 점을 제외하고는 거의 유사한 기능을 제공한다.
ⅶ. select 문
메뉴를 생성할 수 있는 반복 명령이다. select 문은 list에 지정한 항목을 선택 가능한 메뉴로 만들어 화면에 출력한다.
ⅸ. continue
Ⅵ. 함수
하나의 이름으로 실행할 수 있는 명령의 집합으로 인자를 전달할 수 있으며 종료값을 가진다.
Ⅶ. 디버깅
ⅰ. bash -x를 이용한 디버깅
bash -x 옵션을 주어 스크립트를 실행하면 스크립트의 각 행이 실행될 때마다 화면에 출력한다.
ⅱ.trap을 이용한 디버깅
bash -x 방법은 기본적인 실행 여부를 확인할 수는 있지만 실제 변수 안에 저장되는 값을 알수 없다.
이는 스크린트 안에서 시그널을 처리하는 trap을 이용해 해결할 수 있다.
시그널은 실행 중인 프로세스에 정보를 전달하는 메시지로, 가장 대표적인 시그널이 프로세스를 종료시키는 Crtl+c이다.
DEBUG 시그널은 셸이 스크립트를 디버깅하기 위해 생성하는 시그널로 스크립트의 명령이 실행될 때마다 생성된다.
스크립트는 trap 명령을 사용해 시그널을 받았을 때 다른 동작을 수행하도록 처리할 수 있다.
'컴퓨터 공학' 카테고리의 다른 글
소프트웨어 공학, 7장 설계원리 (0) | 2024.06.09 |
---|---|
소프트웨어 공학, 6장 설계원리 (0) | 2024.06.09 |
모바일프로그래밍, 10장 액티비티와 인텐트 (0) | 2024.06.06 |
독학사 C프로그래밍, Day 03 (0) | 2024.06.01 |
모바일프로그래밍, 7장 메뉴와 대화상자 (0) | 2024.05.28 |