1. 조건문의 사용
if true; then echo true; else echo false; fi
1. [..]는 테스트를 위해 사용됨
tom="Tom hanks" deniro="Robert Deniro" [ $tom > $deniro ]
위와 같은 명령문에서는 아래와 같은 오류가 발생
[..] 안에서 '>' 또는 '<' 문자가 대소 비교가 아닌 리다이렉트로 해석되기 때문tom="Tom hanks" deniro="Robert Deniro" [[ $tom > $deniro ]]
따라서 위와 같이 [[..]] 안에 넣어주면 '>' 또는 '<'문자가 대소 비교의 의미로 사용 됨2. [..]에서의 등호
[ $tom = $deniro ]
변수 tom 과 deniro 는 공백을 포함하는 문자열이므로 위와 같은 오류 발생[ "$tom" = "$deniro" ]
위와 같이 인용 부호를 통해 해결 가능[[ $tom = $deniro ]]
또는 [[..]] 안에 내용을 넣어주면 인용부호 생략 가능
1. 인용부호의 적절한 사용
VAR=; if [ $VAR = "" ]; then echo true; else echo false; fi
[ $VAR = "" ] 는 [ = "" ]를 의미하기 때문에 위와 같은 오류가 발생함
따라서 아래와 같이 해결 가능VAR=; if [ "$VAR" = "" ]; then echo true; else echo false; fi
VAR=; if [[ $VAR = "" ]]; then echo true; else echo false; fi
1. 비교 메타 문자 -f (파일의 존재 여부를 확인할 때 사용)
if [ ! -f "hello.txt.bak" ]; then cp "hello.txt" "hello.txt.bak"; fi
현재 디렉토리에 "hello.txt.bak" 파일이 없다면 "hello.txt" 파일을 "hello.txt.bak" 파일명으로 복사2. 실행중인 스크립트의 확인
./sleep.sh & result=`ps aux | grep -i "sleep.sh" | grep -v "grep" | wc -l` if [ $result -ge 1 ]; then echo "script is running"; else echo "script is not running"; fi
if [ $result -ge 1 ] 에서 -ge 비교 메타 문자는 좌측의 내용이 우측의 내용보다 정수값으로 더 큰 값일때 true를 반환
위와 같이 스크립트가 종료 된 이후에도 정상적으로 결과 나타냄3. 비교 메타 문자의 종류
1. [..]를 이용한 test
2. [[..]]를 이용한 test ( [ ] 보다는 [[ ]]를 사용하는 것이 좋음 )
4. 예시
전달 인자를 체크하여 사용법을 출력하기
./goodday.sh ./goodday.sh dir