bash에서 || (logical or)을 사용할 때, ';' 을 사용하지 않는다.

 

if 문 예제

 if [ ${IP} == '' ]; then
        IP="-"
        m=`expr $m + 1`
        continue
    fi

 

 

 logical OR을 썼을때, ; 을 쓰지 않는 것을 유의

     if  [ ${HOSTS[$m]} == '-' ] || [ ${HOSTS[$m]} == '' ]
    then
        m=`expr $m + 1`
        continue
    fi

 

그러나 문자열을 비교할 때는 ""(double quotation mark)을 잘 활용해야 한다.  

[: ==: unary operator expected


첫번째 아규먼트를 받아올 때, $opt라는 변수에 저장하고 변수와 비교할 때는 ""(double quotation mark)를 이용해서 작업하면 에러가 발생하지 않고 잘 작동한다.

#/bin/sh


opt=$1


if [ "$opt" == 'test' ] || [ "$opt" == 'aaa' ]

then

  echo "xxx"

fi



 

출처 :

 

http://idaemon.com.ne.kr/Linux/Bash/operations.html#ANDOR

 

 

 

 

3.6. 연산자 이야기

3.6.1. 연산자

=

산술식과 문자열 대입 모두를 알아서 해주는 다기능 대입 연산자

var=27
category=minerals

문자열 비교에서도 쓰일 수 있습니다.

if [ $string1 = $string2 ]
then
   command
fi

다음 연산자들은 보통 expr 이나 let과 같이 많이 쓰입니다.

산술 연산

+

더하기

-

빼기

*

곱하기

/

나누기

%

나머지(정수 나누기에서 나머지 값)

+=

"plus-equal" (변수를 상수값만큼 증가)

`expr $var+=5`var5 만큼 증가.

-=

"minus-equal" (변수를 상수값 만큼 감소)

*=

"times-equal" (변수를 상수값의 배수 만큼 증가)

`expr $var*=4`var4배 증가.

/=

"slash-equal" (변수를 상수값으로 나눔)

%=

"mod-equal" (변수를 상수로 나눈 나머지 값)

비트 단위 논리 연산은 쉘 스크립트에서 자주 쓰이지는 않지만 포트나 소켓쪽에서 주로 쓰입니다. "비트 조작"은 속도가 빠른 C나 C++같은 컴파일 언어쪽에 더 관련이 있습니다.

<<

비트 왼쪽 쉬프트 (쉬프트 연산 한번당 2로 곱함)

<<=

"left-shift-equal"

"var <<= 2"var2 비트만큼 왼쪽으로 쉬프트 (4로 곱함)

>>

비트 오른쪽 쉬프트 (비트 연산 한번당 2로 나눔)

>>=

"right-shift-equal" (<<=와 반대)

&

비트 AND

&=

"비트 AND-EQUAL"

|

비트 OR

|=

"비트 OR-equal"

~

비트 negate

!

비트 NOT

^

비트 XOR

^=

"비트 XOR-equal"

관련 테스트

<

보다 작은

>

보다 큰

<=

보다 작거나 같은

>=

보다 크거나 같은

==

같은

!=

같지 않은

&&

논리 AND

if [ $condition1 ] && [ $condition2 ]
# condition1과 condition2가 둘 다 참이라면...

참고: && 는 상황에 따라 AND list에 쓰여서 명령어 여러개를 붙여서 쓸 때도 사용됩니다(3.21절 참고).

||

논리 OR

if [ $condition1 ] || [ $condition2 ]
# condition1이나 condition2 둘 중에 하나라도 참이라면...

예 3-15. && 와 ||를 쓴 복합 조건 테스트

#!/bin/bash

a=24
b=47

if [ $a -eq 24 ] && [ $b -eq 47 ]
then
  echo "#1 테스트 성공."
else
  echo "#1 테스트 실패."
fi

# ERROR:
# if [ $a -eq 24 && $b -eq 47 ]


if [ $a -eq 98 ] || [ $b -eq 47 ]
then
  echo "#2 테스트 성공."
else
  echo "#2 테스트 실패."
fi


# -a 와 -o 옵션은 복합 조건 테스트에서 쓸 수 있는
# 다른 방법입니다.
# 이 점을 지적해준 Patrick Callahan에게 감사를 표합니다.


if [ $a -eq 24 -a $b -eq 47 ]
then
  echo "#3 테스트 성공."
else
  echo "#3 테스트 실패."
fi


if [ $a -eq 98 -o $b -eq 47 ]
then
  echo "#4 테스트 성공."
else
  echo "#4 테스트 실패."
fi


a=rhino
b=crocodile
if [ $a = rhino ] && [ $b = crocodile ]
then
  echo "#5 테스트 성공."
else
  echo "#5 테스트 실패."
fi

exit 0

3.6.2. 숫자 상수

쉘 스크립트는 기본적으로 숫자를 10진수로 해석합니다. 만약에 숫자 앞에 0이 있다면 8 진수(8 진법)이고 0x가 있다면 16 진수(16 진법)입니다. #이 들어간 숫자는 진법#숫자로 해석합니다(이 때는 범위 제한이 있습니다).

예 3-16. 숫자 상수 표기법:

#!/bin/bash

# 숫자 표기법.

# 10진수
let "d = 32"
echo "d = $d"
# 별로 특별한 게 없습니다.


# 8진수: '0' 다음에 나오는 숫자
let "o = 071"
echo "o = $o"
# 결과는 10진수로 나타납니다.

# 16진수: '0x'나 '0X' 다음에 나오는 숫자
let "h = 0x7a"
echo "h = $h"

# 다른 진법: 진수#숫자
# 진수는(BASE)는 2 와 64 사이입니다.
let "b = 32#77"
echo "b = $b"
# 이 표기법은 아주 제한된 범위의 숫자에서만 동작합니다.
let "c = 2#47"  # Error: 범위 초과.
echo "c = $c"


exit 0


Posted by 김용환 '김용환'

댓글을 달아 주세요