이 테스트 명령은 Linux 명령 행에서 다른 요소와 비교하기 위해 사용할 수 있지만 논리 및 프로그램 흐름을 제어하는 조건문의 일부로 BASH 셸 스크립트 에서보다 일반적으로 사용됩니다.
기본 예제
터미널 창 을 열어 이러한 명령을 간단하게 시도 할 수 있습니다.
테스트 1 -eq 2 && echo "예"|| 에코 "아니오"
위의 명령은 다음과 같이 세분화 할 수 있습니다.
- 테스트 - 이것은 당신이 비교를 수행하려한다는 것을 의미합니다.
- 1 - 비교할 첫 번째 요소
- -eq (비교하는 방법,이 경우 하나의 숫자가 다른 숫자와 같은지 테스트하는 중입니다)
- 2 - 최초의 요소를 다시 비교하고있는 요소
- && - 결과가 참이면 다음 명령문을 실행하십시오.
- echo "yes"- 비교 결과가 true를 반환 할 경우 실행할 명령입니다.
- || - 결과가 false 인 경우 다음 명령문을 실행하십시오.
- echo "no"- 비교 결과가 false를 반환 할 경우 실행할 명령입니다.
본질적으로 명령은 1과 2를 비교하며 일치하는 "예"문은 "예"로 표시되고 일치하지 않으면 "아니오"문이 실행되어 "아니오"로 표시됩니다.
숫자 비교
숫자로 구문 분석하는 요소를 비교하는 경우 다음 비교 연산자를 사용할 수 있습니다.
- -eq - 값 1은 동일한 값 2입니다.
- -ge - 값 1보다 크거나 값 2와 같습니다.
- -gt - 값 1보다 값 2보다 큼
- -le - 값 1은 값 2보다 작거나 같습니다.
- -lt - 값 1이 값 2보다 작음
- -ne - 값 1이 값 2와 같지 않음
예 :
테스트 1 -eq 2 && echo "예"|| 에코 "아니오"
(1이 2가 아니기 때문에 화면에 "no"가 표시됨)
테스트 1 -ge 2 && echo "예"|| 에코 "아니오"
(1이 2보다 크거나 같지 않으므로 화면에 "no"가 표시됨)
test 1 -gt 2 && echo "예"|| 에코 "아니오"
(1이 2보다 커서 화면에 "아니오"표시)
테스트 1 -le 2 && echo "예"|| 에코 "아니오"
(1이 2보다 작거나 같기 때문에 화면에 "예"표시)
테스트 1 -lt 2 && echo "예"|| 에코 "아니오"
(1이 2보다 작거나 같기 때문에 화면에 "예"표시)
테스트 1 - 2 && echo "예"|| 에코 "아니오"
(1이 2가 아니기 때문에 화면에 "예"표시)
텍스트 비교
문자열로 구문 분석하는 요소를 비교하는 경우 다음 비교 연산자를 사용할 수 있습니다.
- = - 문자열 1은 문자열 2와 일치합니다.
- ! = - 문자열 1과 문자열 2가 다릅니다.
- -n - 0보다 큰 문자열 길이입니다.
- -z - 문자열 길이가 0입니다.
예 :
test "string1"= "string2"&& echo "예"|| 에코 "아니오"
( "string1"은 "string2"와 같지 않으므로 화면에 "no"가 표시됩니다)
test "string1"! = "string2"&& echo "yes"|| 에코 "아니오"
( "string1"은 "string2"와 같지 않으므로 "yes"가 화면에 표시됩니다)
test -n "string1"&& echo "yes"|| 에코 "아니오"
"string1"의 문자열 길이가 0보다 크기 때문에 화면에 "예"라고 표시됩니다.
test -z "string1"&& echo "예"|| 에코 "아니오"
( "string1"의 문자열 길이가 0보다 크기 때문에 화면에 "no"가 표시됩니다)
파일 비교
파일을 비교하는 경우 다음 비교 연산자를 사용할 수 있습니다.
- -ef - 파일에 동일한 장치 및 inode 번호가 있는지 (동일한 파일인지)
- -nt - 첫 번째 파일이 두 번째 파일보다 최신 파일입니까?
- -ot - 첫 번째 파일이 두 번째 파일보다 오래된 파일입니까?
- -b - 파일이 존재하고 블록 스페셜입니다.
- -c - 파일이 있고 문자 특수 문자입니다.
- -d - 파일이 있고 디렉토리입니다.
- -e - 파일이 존재합니다.
- -f - 파일이 있고 일반 파일입니다.
- -g - 파일이 있고 지정된 그룹 번호를가집니다.
- -G - 사용자 그룹에 의해 존재하고 소유자 인 파일
- -h - 파일이 있고 심볼릭 링크입니다.
- -k - 파일이 존재하고 스티키 비트가 설정되어 있습니다.
- -L - -h와 동일합니다.
- -O - 소유자가있는 파일이 있습니다.
- -p - 파일이 있고 명명 된 파이프입니다.
- -r - 파일이 있고 읽을 수 있습니다.
- -s - 파일이 있고 크기가 0보다 큽니다.
- -S - 파일이 있고 소켓입니다.
- -t - 파일 디스크립터가 터미널에서 열린다.
- -u - 파일이 있고 set-user-id 비트가 설정됩니다.
- -w - 파일이 있고 쓰기 가능합니다.
- -x - 파일이 있고 실행 가능합니다.
예 :
test / path / to / file1 -n / path / to / file2 && echo "예"
(file1이 file2보다 새로운 경우 "yes"라는 단어가 표시됩니다)
test -e / path / to / file1 && echo "예"
(file1이 있으면 "예"라는 단어가 표시됩니다)
test -O / path / to / file1 && echo "yes"
(file1을 소유하고 있다면 "예"라는 단어가 표시됩니다 ")
술어
- Block special - 파일은 블록 단위로 데이터를 읽는 블록 장치입니다. 이들은 일반적으로 하드 드라이브와 같은 장치 파일입니다.
- 특수 문자 - 파일을 쓸 때 즉시 작동하며 일반적으로 직렬 포트와 같은 장치입니다
여러 조건 비교
지금까지 모든 것이 한 가지를 다른 것과 비교하고 있었지만 두 가지 조건을 비교하고 싶다면 어떻게 될까요?
예를 들어, 동물의 다리가 4 개인 경우 "음매"가되면 암소가됩니다. 단순히 4 개의 다리를 검사했다고해서 암소가 있다고 보장 할 수는 없지만 확실히 소리를 확인하는 것은 아닙니다.
한 번에 두 조건을 테스트하려면 다음 문을 사용하십시오.
테스트 4 -eq 4 -a "moo"= "moo"&& echo "암소"|| 에코 "그것은 암소가 아니다"
여기에서 중요한 부분은 -a가 의미하는 -a입니다.
동일한 테스트를 수행하는 데 더 일반적으로 사용되는 방법이 더 많으며 그 방법은 다음과 같습니다.
test 4 -eq 4 && test "moo"= "moo"&& echo "그것은 암소"|| 에코 "그것은 암소가 아니다"
또 다른 테스트는 두 개의 명령문을 비교하는 것이고, 둘 중 하나가 true이면 문자열을 출력하는 것입니다. 예를 들어 "file1.txt"라는 파일이 있는지 또는 "file1.doc"라는 파일이 있는지 확인하려는 경우 다음 명령을 사용할 수 있습니다
테스트 -e file1.txt -o -e file1.doc && echo "file1 exists"|| echo "file1 does not exist"
여기서 중요한 부분은 또는를 의미하는 -o입니다.
동일한 테스트를 수행하는 데 더 일반적으로 사용되는 방법이 더 많으며 그 방법은 다음과 같습니다.
테스트 -e file1.txt || test -e file1.doc && echo "file1 exists"|| echo "file1 does not exist"
테스트 키워드 제거
비교를 수행하기 위해 실제로 test라는 단어를 사용할 필요는 없습니다. 다음과 같이 명령문을 대괄호로 묶으십시오.
[-e file1.txt] && echo "file1 exists"|| echo "file1 does not exist"
[및]은 기본적으로 테스트와 동일한 의미입니다.
이제 다음과 같이 여러 조건을 비교해 볼 수 있습니다.
[4 -eq 4] && [ "moo"= "moo"] && echo "암소입니다"|| 에코 "그것은 암소가 아니다"
[-e file1.txt] || [-e file1.doc] && echo "file1 exists"|| echo "file1 does not exist"
개요
한 변수의 값을 다른 것으로 테스트하고 프로그램 흐름을 제어 할 수 있기 때문에 테스트 명령은 스크립트에서 더 유용합니다. 표준 명령 행에서 파일을 사용하여 파일이 존재하는지 테스트 할 수 있습니다.