Linux/Shell Script

쉘스크립트 if 문 당황할 만한 상황들

제이Lee 2023. 12. 22. 14:46

오늘은 쉘스크립트에 if 문에 대해서 정리를 해보려 한다.

이런 기본적인걸 개발자가 모르는게 말이 되냐 라고 생각할 수도 있지만,

실제 우리가 C나 Java 등에서 사용하던 if 문과 비교하면

약간씩 다른 부분이 있다. 그래서 처음 사용해보면 '이게 왜 에러가 나지?' 라는 생각을 하게되는

경우가 종종 있다.

그럼 간단하게 정리부터 해보자.


1. 문법이 다르다.

해당 스샷을 확인해보자.

 

만약 위의 상황을 쉘스크립트를 써보지 않은 사람이 보게 된다면,

'b' 값이 나오겠지 라고 생각할 수 있다.

하지만 실제로 실행해보면?

 

보는바와 같이 'a'가 나온다.

a가 나온 이유는 if문 안의 조건식이 정상적인 문법이 아니기 때문에 항상 참이 나오기 때문이다.

 

이렇게 쉘스크립트를 처음 쓰면,

기존과 문법이 다르기 때문에 사용하는데 문제가 있다.

그럼 어떻게 문법이 다른지 확인해보자.

아래의 표를 참고하자.

-z 문자열의 길이가 0이면 참
-n 문자열의 길이가 0이 아니면 참
-eq 값이 같으면 참
-ne 값이 다르면 참
-gt 값1 > 값2
-ge 값1  >= 값2
-lt 값1 < 값2
-le 값1 <= 값2
-a &&연산과 동일 and 연산
-o ||연산과 동일 xor 연산

 

이런식으로 부호 표시가 아닌 문자로 조건을 넣어줘야 한다.

이거 외에도 더 있지만, 잘 안쓰기 때문에 필요할 때 찾아서 사용하자.

 

그렇다면 위에 예제를 바꿔보자.

 

기호 '>'를 -gt로 바꿔줬다.

과연 의도한 값이 나올까?

의도한 값인 b가 나오긴 하지만,

뭔가 에러가 한줄 나온다.


2. 변수를 가져다 쓰는 법이 다르다.

위의 내용을 보면 에러가 하나 떴는데,

이유는 if 조건의 'a'가 우리가 생각했던 변수 a가 아니기 때문이다.

쉘스크립트에서 변수를 가져다 쓰려면 다음과 같이 하면 된다.

이런식으로 '$'표시를 넣어주면 해당 변수의 값을 가져다 쓸 수 있다.

위처럼 바꿔준 후 실행하면,

드디어 깔끔하게 b라는 값이 나오게 된다.


3. '{}'를 쓰지 않고 then을 사용한다.

일반적은 개발 언어들은 대부분 '{}'를 사용해 조건문의 내용을 구분하지만,

쉘스크립트의 경우 위처럼 then을 사용하여 구분한다.

여기서 또 주의할 점이 하나 있다.

이런식으로 then을 if문과 같은 줄에 넣으면 어떻게 될까?

바로 이렇게 else를 찾을 수 없다고 에러가 난다.

 

여기서 확인할 수 있는 부분은

if구절과 then은 같은 라인에 존재할 수 없다는거다.

물론 방법은 있다.

이런식으로 ';'을 넣어주면 then을 다음 줄로 인식하기 때문에 가능하다.

근데 나는 보기에 안이뻐서 그냥 then을 다음 줄에 쓴다.


4. 마지막은 fi로 마무리.

fi를 빼먹으면 아래와 같은 에러가 뜬다.

반드시 if문이 끝나는 지점에 fi를 넣어주자.

 


 

오늘은 쉘스크립트를 처음 접하는 개발자가

당황해 할만한 상황에 대해 정리해봤다.

 

해당 내용들은 한번 보기만 해도

실수를 안할 내용들이니깐 꼭 확인하고

스크립트를 짜도록 하자.