우분투 Bash 쉘스크립트 작성 시 if 문 내에서 연산자 ( ==, < 등)을 사용할 때 No such file or directory 오류가 나는 경우에 해결방법은 아래와 같다.
□ 사례
text.sh
var=100 if [ $var < 200 ]; then ... ... else ... ... fi |
실행 결과
$ bash test.sh test.sh: line 3: 200: No such file or directory |
bash 쉘(POSIX 쉘) 가이드에 따르면 하기와 같이 "<" 연산자 대신 "-lt"로 수정해야 제대로 동작한다.
[ "$var" -lt 200 ]
각 사용법은 하기와 같다.
□ POSIX 쉘 가이드 : 상황별 "<" 연산자 사용 방법
- ※ [ 공백 "$var" -lt 200 공백 ] 처럼 '공백' 이 있어야 한다.
문법 | 대상 (상황) | 주의 사항 |
[ "$var" -lt 200 ] | 숫자 비교 | POSIX shell 전체 |
[ "$var" \< 200 ] | 문자 비교 | POSIX shell 전체 |
[[ $var -lt 200 ]] | 문자 비교 | bash, ksh 에서만 동작 |
(( $var -lt 200 )) | 숫자 비교 | bash, ksh 에서만 동작 |
(( var < 200 )) | 숫자 비교, var를 $ 없이도 변수로 인식함 | bash, ksh 에서만 동작 |
□ 참고
비교 연산자 | 사용법 | 의미 |
== | [ $A == $B ] | 같다 |
!= | [ $A != $B ] | 같지 않다 |
> | [ $A > $B ] | 크다 |
>= | [ $A >= $B ] | 크거나 같다 |
< | [ $A < $B ] | 작다 |
<= | [ $A <= $B ] | 작거나 같다 |
&& | [ $A && $B ] | 논리연산 AND, 둘 다 모두 True 이면 True |
|| | [ $A || $B ] | 논리연산 OR, 둘 중 하나가 True 이면 True |
비교식 | 사용법 | 약어 유래 | 의미 | 비고 |
-z | [ -z $A ] | 공백이면 True | $A == "" | |
-n | [ -n $A ] | 공백이 아니면 True | $A != "" | |
-eq | [ $A -eq $B ] | equal to | 같다 | $A == $B |
-ne | [ $A -ne $B ] | not equal to | 같지 않다 | $A != $B |
-ge | [ $A -ge $B ] | greater than or equal to | 크거나 같다 | $A >= $B |
-gt | [ $A -gt $B ] | greater than | 크다 | $A > $B |
-le | [ $A -le $B ] | less than or equal to | 작거나 같다 | $A <= $B |
-lt | [ $A -lt $B ] | less than | 작다 | $A < $B |
-a | [ $A -a $B ] | 논리연산 AND, $A, $B 모두 True이면 True | $A && $B | |
-o | [ -o $A ] | 논리연산 OR, $A, $B 중 하나가 True이면 True | $A || $B |
파일 비교 | 사용법 | 의미 |
-f | [ -f $A ] | 파일 (디렉토리나 다른 형태의 파일은 False) |
-d | 이하 동일 | 디렉토리 |
-L | 심볼링 링크 | |
-r | 사용자가 대상에 읽기 권한(read)을 가지고 있으면 True | |
-w | 사용자가 대상에 쓰기 권한(write)을 가지고 있으면 True | |
-x | 사용자가 대상에 쓰기 실행(execution)을 가지고 있으면 True | |
-s | 파일 크기가 0 이 아니면 True | |
-S | 소켓 | |
-nt | [ $A -nt $B] | $A 파일이 $B 보다 최신이면 True |
-ot | [ $A -ot $B] | $A 파일이 $B 보다 오래되면 True |
-ef | [ $A -ef $B] | 동일 파일이면 True |
반응형
'Linux' 카테고리의 다른 글
docker repository <none> (0) | 2024.10.04 |
---|---|
모바텀(MobaXterm) 세션 죽는 현상 개선 (0) | 2024.09.10 |
tar, tar.gz 압축 및 해제 (2) | 2024.07.03 |
Docker 중단없이 나오기(Detach) (2) | 2024.02.25 |
Ubuntu 버전 확인 (0) | 2024.02.24 |