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` 는 var 를 5 만큼 증가.
- -=
-
"minus-equal" (변수를 상수값 만큼 감소)
- *=
-
"times-equal" (변수를 상수값의 배수 만큼 증가)
`expr $var*=4` 는 var 를 4배 증가.
- /=
-
"slash-equal" (변수를 상수값으로 나눔)
- %=
-
"mod-equal" (변수를 상수로 나눈 나머지 값)
비트 단위 논리 연산은 쉘 스크립트에서 자주 쓰이지는 않지만 포트나 소켓쪽에서 주로 쓰입니다. "비트 조작"은 속도가 빠른 C나 C++같은 컴파일 언어쪽에 더 관련이 있습니다.
- <<
-
비트 왼쪽 쉬프트 (쉬프트 연산 한번당 2로 곱함)
- <<=
-
"left-shift-equal"
"var <<= 2" 는 var를 2 비트만큼 왼쪽으로 쉬프트 (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 |
'unix and linux' 카테고리의 다른 글
스카시 디스크 장비 보기 (0) | 2007.10.01 |
---|---|
csh과 bash 차이. (변환 가이드) (0) | 2007.09.12 |
bash에서 배열 만들기 Tip (0) | 2007.09.11 |
bash integer 비교 (0) | 2007.09.11 |
bash에서의 unary operator expected 문제점 해결하기 (0) | 2007.09.11 |