ice rabbit programming

[Bash] if문 에서 에러 발생 본문

Development/Scripts

[Bash] if문 에서 에러 발생

판교토끼 2020. 9. 8. 08:23
#!/bin/bash
value=1
if[ $value -ne 0 ]; then
    echo "good"
else
    echo "bad"
fi

bash 쉘 스크립트에서 if문은 위와 같이 사용한다. ==은 -eq, !=은 -ne이고 if와 elif(else if, 파이썬과 같다)에는 then을 사용한다.

그런데 간혹 [: missing `] 와 같은 에러가 발생한다. 어떤 문제일까 하고 찾아봤더니
if[$value -ne 0]; 과 같이 쓰면 발생하는 현상이었다. 즉 조건 구문과 대괄호[] 사이에는 공백이 있어야 한다는 것.

또 겪었던 오류는 Error : unary operator expected 오류였다. 이는 크게 두 가지 문제였다.
하나는 $1 -eq "hi"로 적었을 때, $1이 비어있다면 -eq "hi" 와 같은 이상한 구문이 되어버린다. 그러므로 "$1" -eq "hi"로 적어 $1이 비어있더라도 "" -eq "hi"가 되도록 해야 한다.
다른 하나는 비교 대상이 서로 다른 타입인 경우였다. 예를 들어 하나는 integer형이고 하나는 string형일 경우, bash에서는 비교 시에 묵시적 캐스팅이 되지 않아 오류가 발생하였다. 비교하는 타입을 맞춰주면 해결된다.