쿼카러버의 기술 블로그
Linux Shell Script - IF 문, 다양한 연산자들(-d, -eq, -a)(디렉토리가 존재하는지 확인하고 싶을 때 등) 본문
Linux Shell Script - IF 문, 다양한 연산자들(-d, -eq, -a)(디렉토리가 존재하는지 확인하고 싶을 때 등)
quokkalover 2021. 7. 18. 11:57If 문
Makefile로 빌드할때나, Shell Script (sh파일 등)을 만들 때 if문은 자주 사용된다.
예 :
- 디렉토리가 없으면 만들기
- 파일이 존재하는지 확인하기 등
if문의 기본 사용법과 어떤 연산자들이 있는지 알아보도록 하겠다.
기본 사용법
if [ 조건식 ]; then //if문 시작
...
elif
...
else
...
fi //if문 종료
- 주의할 점
- if문 선언시의 띄어쓰기
(" ")
와 세미 콜론(;
)- if와 대괄호 사이는 반드시 한 칸씩 띄워주어야 함
- 예:
if [ 0 == 0 ]
- 예:
- if와 대괄호 사이는 반드시 한 칸씩 띄워주어야 함
- if문 선언시의 띄어쓰기
테스트 연산자
대괄호 안의 조건식에는 여러 종류의 테스트 연산자를 사용할 수 있다.
연산자의 종류 및 기능은 다음과 같다
-e
: 존재하는 파일이면 true
-f
: 보통 파일이면 true
-d
: 파일이 디렉토리면 true
-s
: 파일크기가 0이 아니면 true
-z
: 문자열이 null / 길이가 0이면 true
-n
: 문자열이 null이 아니면 true
-h
: 파일이 하드 링크
-L
: 파일이 심볼릭 링크
-r
: 테스트를 돌리는 사용자가 읽기 퍼미션을 갖고 있음
-w
: 테스트를 돌리는 사용자가 쓰기 퍼미션을 갖고 있음
-x
: 테스트를 돌리는 사용자가 실행 퍼미션을 갖고 있음
-g
: 파일이나 디렉토리에 set-group-id 플래그가 세팅되어 있음.
예:
if [ -d /richet ]; then
echo '/richet 디렉토리가 존재한다.'
else
echo '/richet 디렉토리가 존재하지 않는다.'
fi
파일과 관련한 연산자일 경우는 연산자 뒤에 파일명이, 디렉토리와 관련한 연산일 경우에는 연산자 뒤에 디렉토리명이 명시되어야 한다.
산술 비교 연산자 및 문자열 비교 연산자
-eq
: equal
- ==로 대치가능
-ne
: not equal
- ≠ 로 대치 가능
-gt
: greater than
-ge
: grater than or equal
-lt
: less than
-le
: less than or equal
예 : 30번 돌았을 때 멈추고 싶을 때
COUNT=1
age=0
while [ 1 == 1 ]; do
if [ $COUNT -eq 30 ]; then
let age=COUNT
echo 'age reached to '$age
break
fi
let COUNT=COUNT+1
done;
echo 'I am '$age'years old.'
논리 연산자
대괄호([ ]
) 안에 조건식에 두 개 이상의 조건을 넣어야 할 경우 사용
-a
: &&
-o
: ||
if [ 조건식1 -a 조건식2 ]; then
~
else
~
fi
Input값 받아서 처리하기
- 외부로 부터 받은 input 값을 스크립트 내부에서 처리해야 하는 경우가 종종 발생한다.
- 예: ./test_input.sh [input_parameter1] [input_parameter2]
- 위와 같이 외부로부터 받은 input 값은 위치 매개변수를 통하여 처리한다
$1, $2, $3 ..
test_input.sh파일이 위와 같이 생겼을 때.
- input_parameter1은 $1 위치 매개변수로,
- input_parameter2는 $2위치 매개변수로
- 침고 : $0 은 해당 shell script의 이름을 의미함. 여기선
test_input.sh
가 되겠다.
예:
#!/bin/sh
if [ $1 -eq 30 ] then
echo 'input 값은 30'
else
echo 'input 값은 30이 아님'
fi
위와 같은 check_value.sh
파일을 만들고
./check_value.sh 100
./check_value.sh 30
둘 다 해보고 결과값을 확인해보자.
커맨드의 출력값 받아서 처리하기
haha.sh = haha를 출력하는 .sh파일임.
- grep -q를 활용해서 처리
- grep = 커맨드 결과에서 특정 string이 있는지 없는지 확인하고, 있으면 그 string을 포함한 line을 출력
- 예를 들어
echo haha | grep 'ha'
하면 haha가 다 출력됨
- 예를 들어
- grep = 커맨드 결과에서 특정 string이 있는지 없는지 확인하고, 있으면 그 string을 포함한 line을 출력
if ./haha.sh | grep -q 'cc'; then
echo it contains haha
fi
- 여기서 -q = 결과물을 출력하지 않겠다는 옵션
- 따라서 위 커맨드는 아무것도 출력하지 않음
'Linux - Ubuntu > Shell Script' 카테고리의 다른 글
[Linux] sed - 리눅스 명령어 sed에 대해서 (1) | 2021.08.18 |
---|---|
Linux Shell Script - find (리눅스에서 파일, 디렉토리 찾는 법) (0) | 2021.07.22 |
Linux Shell Script - Pipe ( | ) (리눅스에서 파일 검색법, cpu 모델명 찾기 등) 쉬운 사용법 & 원리에 대한 이해 (0) | 2021.07.18 |
Linux Shell Script - Redirection (>, >>, 2>&1) (커맨드/프로그램 로그 저장) 쉬운 사용법 & 원리에 대한 이해 (0) | 2021.07.18 |
Linux Shell Script - while 문 (반복문) (테스트 스크립트 반복 실행하고 싶을 때 등) (0) | 2021.07.18 |