## if 문
문법:
if condition
then
statements
[elif condition
then statements ...]
[else
statements]
fi
condition 은 기존 프로그래밍 언어와 달리 명령의 종료상태를 나타낼 수 있다.
즉 if condition 은 if command ran successfully 로 바꿔 말 할 수 있다. condition 에 해당하는 statements 가 성공적으로 수행되면 then 이하의 statements 를 수행하고, 그렇지 않은 경우 else 문으로 넘어간다.
이러한 종료코드는 명령을 수행할 때마다 새로 세팅된다. 해당 명령의 종료코드를 알기위해서는 특수 셀 변수인 ? 를 사용한다. 즉 $? 이 이전 명령의 종료코드를 담고 있게 된다. 함수의 종료 코드는 return N 으로 특정 값을 리턴하지 않은 경우에 마지막 명령의 종료코드가 리턴된다.
종료코드는 '&&' 나 '||' 로 조합될 수 있다.
1) if statement1 && statement2 ; then ..
2) if statement1 || statement2 ; then ..
1) 구문은 statement1 이 거짓인 경우에 statement2 는 수행되지 않는다. 마찬가지로 2) 구문은 statement1 이 참인 경우 statement2 는 수행되지 않는다.
then 을 if 문과 같은 줄에서 사용하려면 bash 의 표준 구문 분리 문자인 ; 를 사용해주어야 한다.
if condition ; then ...
## 조건 검사 : [ ] 로 둘러싸서 조건 검사 수행. "[ " " ]" 와 같이 반드시 공백으로 띄워줘야 한다.
조건 검사시 괄호로 묶고('(', ')') -a(AND) 또는 -o(OR) 로 조건을 조합할 수 있다. 괄호를 사용할 경우 '\'를 사용하여 이스케이프 처리를 해줘야 한다. '&&' '||' 와 동일하지만, -a, -o 는 조건 구문([ ]로 둘러싸인 구문) 안에서만 사용가능하다.
1. 문자열 비교
str1 = str2 | 문자열이 일치한다. |
str1 != str2 |
문자열이 일치하지 않는다. |
str1 < str2 |
str1 이 str2 보다 작다 |
str1 > str2 | str1 이 str2 보다 크다 |
-n str1 | str1 이 NULL 이 아니다(길이가 0보다 크다) |
-z str1 | str1 이 NULL 이다.(길이가 0이다) |
2. 파일속성 검사
-d file |
file 존재하고, 디렉토리인 경우 |
-e file |
file 존재하는 경우 |
-f file |
file 존재하고 일반 파일인 경우 |
-r file |
file 존재하고 read 속성을 가지는 경우 |
-s file |
file 존재하고 비어있지 않은 경우(size) |
-w file |
file 존재하고 write 속성을 가지는 경우 |
-x file |
file 존재하고 일반 파일의 경우 실행권한이 디렉토리의 경우 검색 권한이 있는 경우 |
-O file |
file 의 소유자인 경우 |
-G file |
file 의 그룹ID 가 현재 사용자 그룹과 일치하는 경우 |
file1 -nt file2 |
file1 이 file2 보다 나중에 작성된 파일인 경우 |
file1 -ot file2 |
file1 이 file2 보다 이전에 작성된 파일인 경우 |
3. 정수조건
-lt |
작다 |
-le | 작거나 같다. |
-eq | 같다. |
-ge | 크거나 같다. |
-gt | 크다 |
-ne | 같지 않다. |
## for 문
bash 의 for 문은 다른 언어들처럼 반복횟수나 반복할 값의 범위를 지정하지 못한다. 값의 목록을 정해 놓고 사용해야 한다.
for name [ in list ]
do
statements that can use $name ...
done
in list 를 생략할 경우 "$@" - 따옴표로 묶은 명령행 인자목록 - 이 기본값이 된다. 하지만 모든 언어가 그렇듯이 명확하게 기술해주는 습관을 들이자!
## case 문
bash 의 case 는 다른 언어들처럼 간단한 값을 검사하는 것이 아니고, 와일드카드 문자 사용이 허락되는 패턴을 놓고 문자열을 검사하는데 사용된다.
case expression in
pattern1)
statements ;;
pattern2)
statements;;
...
esac
pattern 에 해당하는 부분은 '|' 를 사용하여 여러개의 패턴을 표현할 수 있다.
# select 문
간단한 메뉴를 쉽게 사용할 수 있게 해준다.
select name [in list]
do
statements than can use $name...
done
for 문과 동일, for 대신 select 사용. 따라서 in list 를 생략하면 동일하게 "$@" 으로 대체된다.
select 문이 하는 일은 다음과 같다.
- list 에 있는 항목으로 된 메뉴를 생성, 형식은 번호로 선택하도록 되어있다.
- name 변수에 선택한 내용을 저장한고 선택한 번호는 내장 변수인 RELAY에 저장
- statments 를 실행
select 의 번호를 선택하게 하는 프롬프트는 PS3 을 사용한다. 기본값으로 #? 이 사용되지만, 원한다면 바꿀 수 있다.
select 구문에서 break 는 C 언어의 break 와 동일한 역할을 한다. 하지만, case 문의 경우에는 ;; 이 break 역할을 대신한다.
# while / until 문
조건이 참인 동안(while) 또는 조건이 참일 때까지(until) 코드를 반복하는 역할을 수행한다.
while condition
do
statements...
done
==========================
until condition; do
statements...
done
until 문의 경우 C언어와 달리 조건이 제일 위에서 수행된다는 점에 유의한다. 실제로 until 문은 잘 사용하지 않는다.
while 문은 조건이 참인동안, until 의 경우 조건이 거짓인 경우에 루프가 실행된다.
'IT 기술 > 프로그래밍관련' 카테고리의 다른 글
[bash] 5th - Trap Statement (0) | 2013.08.01 |
---|---|
[linux] openat / open 의 차이점 (0) | 2012.12.28 |
[bash] 4th - 명령행 옵션과 유형 변수 (0) | 2012.09.26 |
[bash] 2nd - 기본 쉘 프로그래밍 (0) | 2012.08.10 |
bash 활용 첫번째 정리 - 명령행 편집 (0) | 2012.08.08 |