728x90
반응형
SMALL
기본 if문
대부부분의 프로그래밍 언어에서 지원하는 if문
기본 if 문법은 아래와 같다.
if [ 조건 ] then 참일 경우 실행 fi
주의할 점은 [ 조건 ] 사이의 각 단어에는 모두 공백이 있어야한다.!
소스 설명
- 2행 : [ ] 사이에는 참과 거짓을 구분하는 조건식이 들어간다. ' = ' 은 문자열이 같은지 비교하며, ' != ' 은 문자열이 같지 않은지 비교한다. if1.sh 에서는 조건식이 참이므로 4행을 실행한다. 또, ' [ ] ' 대신 test라는 키워드를 사용할 수 도 있다. 2행과 if test "woo" = "woo" 는 동일한 구문이다.
if ~ else 문
참인 경우와 거짓인 경우를 구분해서 실행한다.
if [ 조건 ] then 참인경우 실행하는 소스 else 거짓인 경우 실행하는 소스 fi
조건문에 들어가는 비교 연산자
조건문에 들어가는 비교 연산자에는 문자열 비교 연산자와 산술 연산자가 있다.
문자열 비교 결과 "문자열1" = "문자열2" 두 문자열이 같으면 참 "문자열1" != "문자열2" 두 문자열이 같지 않으면 참 -n "문자열" 문자열이 NULL 아니면 참 -z "문자열" 문자열이 NULL 이면 참
산술 비교 결과 수식1 -eq 수식2 두 수식이 같으면 참 수식1 -ne 수식2 두 수식이 같지 않으면 참 수식1 -gt 수식2 수식1이 크면 참 수식1 -ge 수식2 수식1이 크거나 같으면 참 수식1 -lt 수식2 수식이 작으면 참 수식1 -le 수식2 수식이 작거나 같으면 참 !수식 수식이 거짓이면 참
파일과 관련된 조건
if문에서 파일을 처리하는 조건은 아래와 같다.
파일 조건 결과 -d 파일이름 파일이 디렉터리면 참 -e 파일이름 파일이 존재하면 참 -f 파일이름 파일이 일반 파일이면 참 -g 파일이름 파일에 set-group-id 가 설정되면 참 -r 파일이름 파일이 읽기 가능이면 참 -s 파일이름 파일 크기가 0아니면 참 -u 파일이름 파일파일에 set-user-id가 설정되면 참 -w 파일이름 파일이 쓰기 가능 상태면 참 -x 파일이름 파일이 실행 가능 상태면 참
소스설명
- 2행 : fname 변수에 cron 서버 실행 파일인 /lib/systemd/system/cron.service 를 저장한다.
- 3행 : fname 변수에 저장된 /lib/systemd/system/cron.service 파일이 일반 파일이면 참이므로 5행을 실행하고, 그렇지 않으면 거짓이므로 7행을 실행시킨다.
- 5행 :fname에 들어 있는 파일의 앞에 5줄을 출력한다.
case ~ esac 문
if문은 참거짓과 두 가지 경우만 사용할 수 있다. (이것을 2중 분기라고도 한다) 그런데, 여러가지 경우의 수가 있다면 if문을 계속 중복해서 사용해야 하므로 구문이 복잡해 진다.
이때 사용하는 것이 case 문이다. 이를 '다중 분기' 라고도 한다.
[1] 첫 번째 예시
소스설명
- 2행 : 첫 번째 파라미터 변수 $1 값에 따라 3행, 5행, 7행, 9행으로 분기한다.
- 4행 : 3행에서 start) 일경우 실행된다. 주의할 점은 맨 뒤에 새미클론(;;) 을 2개 붙여야 한다.
- 9행 : 그 외의 것들이 입력되면 실행하는 default 같은 것이다.
- 11행 : case 문 종료를 표시한다.
[2] 두 번째 예시
소스설명
- 3행 : answer 변수에 입력한 값을 받는다.
- 5행 : 입력한 값이 yes, y, Y, Yes, YES 중 하나면 6~7행을 실행한다.
- 6행 : 실행할 구문이 더 있으므로 끝에 ;;을 붙이지 않는다는 점에 주의한다.
- 7행 : 실행할 구문이 없으므로 뒤에 ;;을 붙인다.
- 8행 : [nN]*)는 앞에 n또는 N이 들어가는 단어를 모두 인정해준다는 의미다.
- 12행 : 정상적인 종료가 아니므로 exit 1로 종료한다. (꼭 해야하는 사항은 아님)
AND, OR 관계 연산자
조건문에서는 and와 or 의미를 가지는 관계 연산자를 사용할 수 있다.
and는 -a 또는 && 를 사용하며, or 는 -o 또는 ||를 사용한다. -a나 -o는 테스트문 ( [ ] ) 안에서 사용할 수 있는데, 이때 괄호 등의 특수 문자 앞에는 역슬래스 ( \ ) 를 붙여야 한다.
소스설명
- 4행 : 입력한 파일 이름이 일반 파일( -f)이고, 크기가 0이 아니라면 ( -s) 5행을 실행한다. then 구문은 다음 줄에 작성해도 되며, 세미콜론( ; ) 이후에 작성해도 된다. 세미클론은 앞뒤 구문을 행으로 분리해주는 기능이다. 또 이 구문은
if [ \(-f $fname \) -a \(-s $fname \) ] ; then 과 동일하다.
728x90
반응형
LIST
'리눅스공부 > 셸 스크립트 프로그래밍' 카테고리의 다른 글
[프로그래밍] 반복문 unitl문 , break,continue,exit, return 등 사용 / 리눅스 셸 스크립트 프로그래밍 (0) | 2022.12.21 |
---|---|
[프로그래밍] 반복문 for~in문 , while문 / 리눅스 셸 스크립트 프로그래밍 (0) | 2022.12.21 |
[프로그래밍] 셸 스크립트 변수 / 셸 프로그래밍 변수/ 리눅스 셸 스크립트 프로그래밍 변수의 입력과 출력 (1) | 2022.12.20 |
[프로그래밍] 셸 스크립트 프로그래밍 / 리눅스 셸 스크프립트 실행방법 (0) | 2022.12.20 |
[bash셸] 리눅스 셸 프로그래밍 / bash 셸의 이해 (0) | 2022.12.20 |
댓글