본문 바로가기
기타/셸스크립트

[리눅스] if문 정리

by 일코 2024. 2. 10.

셸스크립트를 처음 접하고 딱 하루 정도가 지날 즈음 든 생각은,

아니, 셸스크립트는 파이썬보다 막장이잖아?

 

막연하게나마 저런 생각이 들었다.
변수 타입도 없고, 따옴표도 어떤 땐 있으나마나 하고...
sh의 "1 2 3 4 5"는 파이썬의 [1, 2, 3, 4, 5]와 같다는 것도 충격이었다.
우선 콤마란 게 필요없다.
어떤 때는 괄호도 필요없다.
또 어떤 경우에는 따옴표도 필요없다ㄷㄷㄷ

하여튼,

셸스크립트의 if문은 파이썬과 상당히 비슷한 면이 있다.

간단한 if문을 써보면

파이썬은

a = 10

if a == 10:
    print("equal")
elif a < 10:
    print("less than 10")
else:
    print("greater than 10")

이런 느낌이라면,

셸스크립트는

a=9  # 등호 좌우에 스페이스가 없어야 함!

if [ $a = 10 ]  # 대괄호 사이에 스페이스가 있어야 함! 등호 사이엔 스페이스가 있어도 됨.
then
    echo "equal"
elif [ $a -lt 10 ]  # < 기호를 셸에서 쓰므로ㅜ -lt, -gt 등의 옵션을 사용한다.
then
    echo "less than 10"
else
    echo "greater than 10"
fi

이런 느낌이다.

다소 생소한 부분을 정리해보면

1. 변수선언시 등호 좌우로 스페이스를 넣으면 안 된다. (오류가 남)

2. if문 내의 조건식은 대괄호를 쓰는데, 대괄호와 조건식 사이에는 좌우에 스페이스가 필요하다.

3. else문을 제외하고 모든 if와 elif문 아래에는 then이라는 키워드가 필요하다. (혹은`if [ 조건 ]; then`)

4. if문의 끝엔 예외없이 fi 넣어줘야 한다.

5. 크고작다는 기호에 "<"나 ">"를 쓸 수 없다. (얘들이 셸 연산자이기 때문)
    대신 -lt, -gt, -le, -ge 등을 사용한다.
    그럼에도 <나 >, <=, >= 기호를 사용하고 싶다면
    대괄호 한 겹 대신 소괄호 두 겹으로 감싸주면 된다.

 

간단히 마치며

셸스크립트로 파이썬을 대체하고 싶은 것은 아니다.
다만, 리눅스 운영체제를 더 잘 다루고 싶어서 배우는 중인데,
이거 진국이다. 뭐랄까, 재미있기도 하고.
셸스크립트는 45년 전에 개발되었다고 하는데
(zsh은 '90년에 만들어졌다고 한다.)

당시로 타임머신을 타고 돌아간 기분이다.
(물론 좋은 의미로!)

댓글