<Linux Shell Script Chapter 5> - 비교와 루프문 1

심우열·2023년 2월 21일
0

Linux Shell Script

목록 보기
11/17

1. 조건문(if..else..fi)

1. 조건문의 사용

if true; then echo true; else echo false; fi

2. [..] vs. [[..]]

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 ]] 


또는 [[..]] 안에 내용을 넣어주면 인용부호 생략 가능

3. 인용부호 사용시 주의 사항

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

4. 비교 메타 문자들

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

profile
Dev Ops, "Git, Linux, Docker, Kubernetes, ansible, " .

0개의 댓글