본문 바로가기

Linux/쉘스크립트

3. 비교 연산자(이진)

정수 비교


-eq        같음

if [ "$a" -eq "$b" ]

-ne        같지 않음

if [ "$a" -ne "$b" ]

-gt        더 큼

if ["$a" -gt "$b" ]

-ge        더 크거나 같음

if [ "$a" -ge "$b" ]

-lt        더 작음

if [ "$a" -lt "$b" ]

-le        더 작거나 같음

if [ "$a" -le "$b" ]

<        더 작음(이중 소괄호에서)

(("$a" < "$b"))

<=        더 작거나 같음(이중 소괄호에서)

(("$a" <= "$b"))

>        더 큼(이중 소괄호에서)

(("$a" > "$b"))

>=        더 크거나 같음(이중 소괄호에서)

(("$a" >= "$b"))

문자열 비교

=        같음

if [ "$a" = "$b" ]

==        같음

if [ "$a" == "$b" ]

= 와 동의어입니다.

[[ $a == z* ]]    # $a 가 "z"로 시작하면 참(패턴 매칭)
[[ $a == "z*" ]]  # $a 가 z* 와 같다면 참

[ $a == z* ]      # 파일 globbing이나 낱말 조각남이 일어남
[ "$a" == "z*" ]  # $a 가 z* 와 같다면 참

# Thanks, S.C.

!=        같지 않음

if [ "$a" != "$b" ]

이 연산자는 [[ ... ]] 에서 패턴 매칭을 사용.


<        아스키 알파벳 순서에서 더 작음

if [[ "$a" < "$b" ]]

if [ "$a" \< "$b" ]

"<"  [ ] 에서 쓰일 때는 이스케이프를 시켜야 하는 것에 주의.


>        아스키 알파벳 순서에서 더 큼

if [[ "$a" > "$b" ]]

if [ "$a" \> "$b" ]

">"  [ ] 에서 쓰일 때는 이스케이프를 시켜야 하는 것에 주의.


-z        문자열이 "null"임. 즉, 길이가 0이면 참.


-n        문자열이 "null"이 아님. 길이가 0이 아니면 참.


=====================================================================
LAB> 비교연산자를 이용한 예제

# a=1

# if [ $a -eq 0 ]; then
>   echo true
> else
>   echo false
> fi
false

# if [ $a -eq 1 ]; then
>   echo true
> else
>   echo false
> fi
true

# if [ ! $a -eq 10 ]; then
>   echo true
> else
>   echo false
> fi
true


- -a and 연산
# a=1
# b=2
#  if [ $a -eq 1 -a $b -eq 2 ]; then
>   echo true
> else
>   echo false
> fi

# a=1
# b=3
#  if [ $a -lt 20 -a $b -ne 10 ]; then
>   echo true
> else
>   echo false
> fi
true

# if [ ! $a -eq 20 -a ! $b -eq 10 ]; then
>   echo true
> else
>   echo false
> fi
true

- -o (or) 를 이용한 비교연산
a=1
b=3
# if [ $a -eq 20 -o $b -eq 3 ]; then
>   echo true
> else
>   echo false
> fi
true

# a=linux
# b=windows
# if [ $a = linux  ]; then
>   echo true
> else
>   echo false
> fi
true

# if [ $b != linux ]; then
>   echo true
> else
>   echo false
>   [ $b = windows ] && echo windows || echo linux
> fi
true

=====================================================================


=====================================================================
LAB> 국어 점수를 입력받아서 화면에 평가를 출력하는 프로그램을 짜는데
아래 조건을 만족하게 작성하시오.

-- 조건 --
1. if ~ elif 문을 이용할 것
e.g.
# if [ $a -eq 2 ]; then
>   echo true
> elif [ $a -eq 3 ]; then
>   echo true
> elif [ $a -eq 1 ]; then
>   echo "3...."
> fi
3....

2. jumsu.sh 파일의 스크립트를 이용할 것
3. 적절한 변수를 이용할 것
4. 점수는 0 ~ 100만 입력받을 수 있도록 할 것
e.g.
# ./jumsu.sh 
국어 점수를 입력하세요 : 110

국어 점수 범위가 넘었습니다.
국어 점수 범위는 0 ~ 100 까지만 입력하세요.
# ./jumsu.sh 
국어 점수를 입력하세요 : -1

국어 점수 범위가 넘었습니다.
국어 점수 범위는 0 ~ 100 까지만 입력하세요.
-- 조건 --

-- 평가 범위 --
수 : 90 ~ 100
우 : 80 ~ 89
미 : 70 ~ 79
양 : 60 ~ 69
가 : 0  ~ 59
-- 평가 범위 --

-- 실행결과 --
# ./jumsu.sh 
국어 점수를 입력하세요 : 80

당신의 점수는 아래와 같습니다.
국어 점수 : 80, (우)

# ./jumsu.sh 
국어 점수를 입력하세요 : 70

당신의 점수는 아래와 같습니다.
국어 점수 : 70, (미)
-- 실행결과 --

-- jumsu.sh --
#!/bin/sh

str="국어 점수를 입력하세요 : "
grade=""

# 국어 점수 입력 부분
read -p "$str" kor

# 국어 점수 체크 부분
if [ $kor -lt 0 -o $kor -gt 100 ]; then
  echo 
  echo "국어 점수 범위가 넘었습니다"
  echo "국어 점수 범위는 0 ~ 100 까지만 입력하세요"
  exit 1
fi

# 점수 평가 부분
if [ $kor -ge 90 -a $kor -le 100 ]; then
   grade=수 # 90 ~ 100
elif [ $kor -ge 80 -a $kor -le 90 ]; then
   grade=우 # 80 ~ 89
elif [ $kor -ge 70 -a $kor -le 80 ]; then
   grade=미 # 70 ~ 79
elif [ $kor -ge 60 -a $kor -le 70 ]; then
   grade=양 # 60 ~ 69
else
   grade=가 # 59 미만
fi

echo 
echo 당신의 점수는 아래와 같습니다.
echo 국어 점수 : $kor, \($grade\)
-- jumsu.sh --
=====================================================================


'Linux > 쉘스크립트' 카테고리의 다른 글

until과 위치 매개변수 사용  (0) 2015.05.11
5. 루프  (0) 2015.05.06
4. 테스트와 분기(Testing and Branching)  (0) 2015.05.04
2. 파일 테스트 연산자  (0) 2015.05.04
1. 테스트(Test Constructs)  (0) 2015.04.30