Bash 스크립트를 작성할 때 종종 두 문자열을 비교하여 동일한지 여부를 확인해야 합니다. 두 문자열의 길이가 같고 문자 시퀀스가 같으면 두 문자열이 동일합니다.
Bash의 문자열을 비교하는 방법에 대해 설명합니다.
비교 연산자
비교 연산자는 값을 비교하고 참 또는 거짓을 반환하는 연산자입니다. Bash에서 문자열을 비교할 때 다음 연산자를 사용할 수 있습니다.
string1 = string2 및 string1 == string2 - 피연산자가 같으면 equal 연산자가 true를 반환합니다.
= 연산자를 테스트 [명령]과 함께 사용합니다.
패턴 일치를 위해 == 연산자를 [[명령]과 함께 사용합니다.
string1 != string2 - 피연산자가 같지 않으면 부등식 연산자가 true를 반환합니다.
string1 = ~ regex - 왼쪽 피연산자가 오른쪽의 확장 정규식과 일치하면 regex 연산자는 true를 반환합니다.
string1 > string2 - 왼쪽 피연산자가 사전순(알파벳순)에 의해 정렬된 오른쪽보다 클 경우보다 큰 연산자는 true를 반환합니다.
문자열 1 < 문자열 2 - 오른쪽 피연산자가 사전순(알파벳순)에 의해 정렬된 오른쪽보다 클 경우 보다 작은 연산자는 true를 반환합니다.
-z 문자열 - 문자열 길이가 0인 경우 참입니다.
-n 문자열 - 문자열 길이가 0이 아닌 경우 참입니다.
다음은 문자열을 비교할 때 주의해야 할 몇 가지 사항입니다.
이진 연산자와 피연산자 사이에는 공백을 사용해야 합니다.
항상 변수 이름 주위에 큰 따옴표를 사용하면 단어 분할 또는 글머리 기호 문제가 발생하지 않습니다.
Bash는 변수를 "type"으로 구분하지 않으며, 변수는 상황에 따라 정수 또는 문자열로 처리됩니다.
두 문자열이 같은지 확인
대부분의 경우 문자열을 비교할 때 문자열이 같은지 여부를 확인하려고 합니다.
다음 스크립트는 if 문과 test [ 명령을 사용하여 문자열이 = 연산자와 같은지 여부를 확인합니다.
#!/bin/bash
VAR1="Linuxize"
VAR2="Linuxize"
if [ "$VAR1" = "$VAR2" ]; then
echo "Strings are equal."
else
echo "Strings are not equal."
fi
스크립트가 실행되면 다음 출력을 인쇄합니다.
Strings are equal.
다음은 사용자로부터 입력을 받아 지정된 문자열을 비교하는 또 다른 스크립트입니다. 이 예에서는 [[command and == 연산자]를 사용합니다.
#!/bin/bash
read -p "Enter first string: " VAR1
read -p "Enter second string: " VAR2
if [[ "$VAR1" == "$VAR2" ]]; then
echo "Strings are equal."
else
echo "Strings are not equal."
fi
스크립트를 실행하고 메시지가 표시되면 문자열을 입력합니다.
Enter first string: jjeongil
Enter second string: Ubuntu
Strings are not equal.
또한 논리 및 &> ||를 사용하여 문자열을 비교할 수 있습니다.
[[ "string1" == "string2" ]] && echo "Equal" || echo "Not equal"
# Not equal
문자열에 하위 문자열이 포함되어 있는지 확인
문자열에 하위 문자열이 포함되어 있는지 확인하는 방법은 여러 가지가 있습니다.
한 가지 방법은 하위 문자열을 모든 문자와 일치하는 별표 기호 *로 둘러싸는 것입니다.
#!/bin/bash
VAR='GNU/Linux is an operating system'
if [[ $VAR == *"Linux"* ]]; then
echo "It's there."
fi
# It's there.
다른 옵션은 아래와 같이 regex 연산자 =~를 사용하는 것입니다.
#!/bin/bash
VAR='GNU/Linux is an operating system'
if [[ $VAR =~ .*Linux.* ]]; then
echo "It's there."
fi
마침표 뒤에 별표(*)가 붙으면 새 줄 문자를 제외한 모든 문자와 0개 이상 일치합니다.
문자열이 비어 있는지 확인
변수가 빈 문자열인지 여부도 확인해야 하는 경우가 많습니다. -n 및 -z 연산자를 사용하여 이 작업을 수행할 수 있습니다.
#!/bin/bash
VAR=''
if [[ -z $VAR ]]; then
echo "String is empty."
fi
# String is empty.
#!/bin/bash
VAR='Linuxize'
if [[ -n $VAR ]]; then
echo "String is not empty."
fi
# String is not empty.
사례 연산자와 문자열 비교
테스트 연산자를 사용하는 대신 사례 문을 사용하여 문자열을 비교할 수도 있습니다.
#!/bin/bash
VAR="Arch Linux"
case $VAR in
"Arch Linux")
echo -n "jjeongil matched"
;;
Fedora | CentOS)
echo -n "Red Hat"
;;
esac
# jjeongil matched.
사전 비교
사전 비교는 문자열의 문자를 왼쪽에서 오른쪽으로 순차적으로 비교하여 두 문자열을 알파벳 순으로 비교하는 연산이다. 이런 종류의 비교는 거의 사용되지 않는다.
다음 스크립트는 사전순으로 두 문자열을 비교합니다.
#!/bin/bash
VAR1="jjeonil"
VAR2="Ubuntu"
if [[ "$VAR1" > "$VAR2" ]]; then
echo "${VAR1} is lexicographically greater then ${VAR2}."
elif [[ "$VAR1" < "$VAR2" ]]; then
echo "${VAR2} is lexicographically greater than ${VAR1}."
else
echo "Strings are equal"
fi
# Ubuntu is lexicographically greater than jjeonil.
'SW > 리눅스' 카테고리의 다른 글
Linux : Xargs 사용 방법, 예제, 명령어 (1) | 2021.08.25 |
---|---|
CentOS 7 : yum-cron을 사용하여 자동 업데이트 구성 방법, 예제, 명령어 (0) | 2021.08.23 |
Linux, 윈도우, MacOS : DNS 캐시 지우는 방법, 예제, 명령어 (0) | 2021.08.21 |
Linux : 파일, 디렉토리 복사 방법, 예제, 명령어 (0) | 2021.08.20 |
Ubuntu 18.04 : Memcached 설치 방법, 예제, 명령어 (0) | 2021.08.19 |