싱글 브래킷의 포현식에는 조건을 판단하는 여러 테스트 연산자가 사용된다. 문자열을 비교하는 문자열 테스트 연산자에 대해 먼저 알아보자.
| 연산자 | 설명 |
|---|---|
| = 또는 == | 두 문자열이 같으면 참이다. |
| ≠ | 두 문자열이 다르면 참이다. |
| > 혹은 < | 두 문자열을 사전식으로 비교(각 문자의 아스키 값 비교)한다. |
| -n | 문자열의 길이가 0이 아니면 참이다. |
| -z | 문자열의 길이가 0이면 참이다. |
| 문자열에 값이 설정되어 있지 않거나 빈 문자열인 경우, 문자열의 길이를 0으로 판단한다. |
싱글 브래킷의 표현식에 >, < 연산자를 사용할 때는 이스케이프 처리를 해야 제대로 인식한다.(백슬래시 붙이기) 그렇지 않으면 리디렉션으로 해석한다.
script 디렉토리에서 string.sh 라는 파일을 생성해보자. 파일 내용은 아래와 같다.
#!/bin/bash
A="hello"
B="world"
if [ "$A" == "$B" ]; then
echo "== opertaor: True"
else
echo "== operator: False"
fi
if [ "$A" != "$B" ]; then
echo "!= opertaor: True"
else
echo "!= operator: False"
fi
if [ "$A" \\> "$B" ]; then
echo "> opertaor: True"
else
echo "> opertaor: False"
fi
if [ -n "$A" ]; then
echo "-n opertaor: True"
else
echo "-n operator: False"
fi
if [ -z "$A" ]; then
echo "-z opertaor: True"
else
echo "-z operator: False"
fi
각각 false, true, false, true, false를 반환해야 한다. 스크립트를 실행시켜보자.

Bash에서는 변수나 셸에 입력하는 값을 모두 문자열로 인식한다. (숫자도 숫자로 이루어진 문자열로 인식) 그래서 let이나 expr 명령어를 사용했어야 했던 것처럼 if문에서 산술테스트 연산자를 별도로 제공한다.
| 연산자 | 설명 |
|---|---|
| -eq | equal의 약자, 연산자 좌우의 값이 같으면 참을 반환한다. |
| -ne | not equal의 약자, 연산자 좌우의 값이 다르면 참을 반환한다. |
| -le | less than or equal의 약자, 좌측 값이 우측보다 작거나 같으면 참을 반환한다. |
| -lt | less than의 약자, 좌측 값이 우측보다 작으면 참을 반환한다. |
| -gt | greater than의 약자, 좌측 값이 우측보다 크면 참을 반환한다. |
| -ge | greater than or equal의 약자, 좌측 값이 우측보다 크거나 같으면 참을 반환한다. |
integer.sh에 다음과 같이 스크립트를 작성해보자.
#!/bin/bash
A="34"
B="34"
if [ "$A" -eq "$B" ]; then
echo "-eq opertaor: True"
else
echo "-eq operator: False"
fi
if [ "$A" -ne "$B" ]; then
echo "-ne opertaor: True"
else
echo "-ne operator: False"
fi
if [ "$A" -le "$B" ]; then
echo "-le opertaor: True"
else
echo "-le operator: False"
fi
B="56"
if [ "$A" -lt "$B" ]; then
echo "-lt opertaor: True"
else
echo "-lt operator: False"
fi
if [ "$A" -gt "$B" ]; then
echo "-gt opertaor: True"
else
echo "-gt operator: False"
fi
if [ "$A" -ge "$B" ]; then
echo "-ge opertaor: True"
else
echo "-ge operator: False"
fi
결과를 예측해보자. 처음에는 A와 B가 34로 같은 값을 가지기에 true, false, true가 출력될 것이다. 중간에 B가 56으로 수정되면서, lt는 true, gt는 false, ge도 false가 출력될 것이다.
이제 결과를 확인해보자.

mis-usage.sh 라는 스크립트 파일을 만들고 아래 내용처럼 작성해보자.
#!/bin/bash
A="34"
B="56"
echo "A=$A, B=$B"
if [ "$A" \\< "$B" ]; then
echo "< opertaor: True"
else
echo "< operator: False"
fi
A="112"
B="111111"
echo "A=$A, B=$B"
if [ "$A" \\< "$B" ];then
echo "< operator: True"
else
echo "< operator: False"
fi
이제 결과를 확인해보자

<는 문자열을 사전식으로 비교하기 때문에 문자열 34와 문자열 56을 비교한다. 그러면 3이 5보다 작아서 < 연산자는 참을 반환하고, True를 출력한다.
A와 B의 값이 세 번째 문자에서 달라지기 때문에, 더 큰 2를 가지고 있는 A가 더 큰 문자열로 연산된다. 그래서 False가 출력된다.