Bash 스 크 립 트: test 테스트 문

총 1 편 test 는 테스트 라 는 뜻 으로 절차 제어 문 에서 조건 으로 자주 사용 된다.다음은 소개 하 겠 습 니 다.
진가 에 대하 여
다른 언어 와 달리 Bash (다른 Shell 포함) 에 서 는 0 으로 진실 을 표시 하고 0 이 아 닌 것 으로 가 짜 를 표시 합 니 다.성공 을 0 으로 표시 하 는 이 유 는 1 이 아니 라 0 으로 표시 하 는 것 이다.나 는 성공 한 경 우 는 한 가지 뿐 이 고 실 수 를 할 수 있 는 것 은 많 기 때문에 정수 로 실 수 를 표시 하 는 것 도 일리 가 있다 고 생각한다.서로 다른 정 수 는 서로 다른 오 류 를 대표 하기 때문에 일반적으로 양수 의 값 을 통 해 어떤 오류 가 발생 했 는 지 판단 할 수 있다.
만약 당신 이 POSIX 프로 그래 밍 경험 (예 를 들 어 Linux 에서 C 프로 그래 밍) 이 있다 면, 당신 은 errno 의 것 을 알 게 될 것 입 니 다.함수 호출 결 과 를 테스트 하 는 데 사용 되 는 많은 if 문 구 를 알 게 될 것 입 니 다. 모든 함 수 는 기본적으로 0 으로 돌아 갈 때 작업 이 성공 했다 는 것 을 나타 내 고 0 이 아 닌 것 으로 돌아 가면 오류 가 발생 합 니 다. 이때 도 exit (0) 를 사용 해 야 합 니 다.
다음은 본론 으로 들 어가 자.
테스트 정수
기본 규칙
정수 test 는 크기 관 계 를 비교 하 는 것 입 니 다. 다른 언어 와 달리 Bash 에 서 는 <, > 를 사용 하여 같은 번호 보다 크 지 않 고 마이너스 로 시작 하 는 옵션 을 사용 하여 비교 합 니 다.
만약 두 개의 정수 변수 a 와 b 가 있다 면.그러면 a 가 b 보다 큰 지 비교 하면 쓰기 test $a -gt $b 를 하고 조건 에 부합 되 는 진 가 를 0 으로 되 돌려 줍 니 다.실제 터미널 에서 테스트 할 때 테스트 문장의 실행 결 과 를 이렇게 쓸 수 있 습 니 다.
test $a -gt $b && echo Yes

인쇄 Yes 조건 이 성립 되면 인쇄 하지 않 습 니 다.
모든 옵션
옵션
묘사 하 다.
영문 전 칭
eq
... 과 같다
equal
gt
... 보다 크다
greater than
lt
... 보다 작다
less than
ne
같 지 않다
not equal
ge
... 보다 크다
greater or equal
le
이하
less or equal
주의:
옵션 마다 짧 은 횡선 - 이 필요 합 니 다.또 주의해 야 할 것 은 상기 조작 부 호 를 사용 하 는 것 이다. 그러면 조작 부 양쪽 은 반드시 정수 가 되 어야 한다.Bash 에서 정수 에 따 옴 표를 붙 여도 '123' 은 정수 로 간주한다.그러나 정수 [0 - 9] 이외 의 문 자 를 포함 하고 있다 면 12a, '12a' 는 안 된다.
Bash 스 크 립 트 나 Shell 터미널 의 각종 명령 은 다양한 옵션 이 있 기 때문에 기억 할 때 영어 전 칭 을 기억 하고 그 의 미 를 이해 하면 오히려 기억의 난이 도 를 낮 출 수 있 습 니 다.
테스트 문자열
문자열 의 테스트 는 두 문자열 이 같은 지 판단 하고 하나의 문자열 이 비어 있 는 지 판단 하 는 것 을 포함한다.str1 과 str2 가 두 문자열 을 가 진 변수 라 고 가정 합 니 다. (문자열 변수 가 아 닌 두 문자열 을 직접 테스트 할 때 $를 추가 하지 않 습 니 다. 이해 하기 쉽 습 니 다.)구체 적 인 용법 은:
사용법
묘사 하 다.test $str1 = $str2
동일 여 부 를 테스트 하고 0 으로 돌아 갑 니 다.test $str1 != $str2
기다 리 지 않 는 지, 0 으로 돌아 가지 않 는 지 테스트 합 니 다.test $str1 \< $str2
str 1 의 사전 순서 가 str 2 에 있 으 면 0 으로 돌아 갑 니 다.test $str1 \> $str2
str 1 의 사전 순서 가 str 2 이전에 있 으 면 0 으로 돌아 갑 니 다.test $str1
항상test -n $str1
하면, 만약, 만약...test -z $str1
빈 문자열 이 라면 0 으로 돌아 갑 니 다.
사전 서열 에 대한 그 두 가지 비 교 는 사실 번호 > 보다 크 고 번호 < 보다 작다.bash 에서 이 두 기 호 는 방향 을 바 꾸 는 뜻 이 있 기 때문에 여 기 는 역 슬 래 쉬 \ 의 전 의 를 사용 해 야 한다.
# bash                      。

예 를 들 어 아래:
특별 주의 옵션 -n 은 nonzero 의 줄 임 말로 길이 가 0 이 아 닌 것 으로 이해 합 니 다.그러나 특별히 지적 해 야 할 것 은: n 옵션 테스트 시 인용 변 수 를 더 블 따옴표 로 추가 하 십시오.Bash 에서 변 수 를 인용 하 는 방법 은 여러 가지 가 있 습 니 다. 여기 에는 작은 따옴표 가 붙 든 말 든 상관 이 없다 고 생각 합 니 다.멘 붕테스트 를 통 해 만약 에 제 가 현재 정의 되 지 않 은 변수 var (또는 var = "로 정의) 가 있다 면 이론 적 으로 var 는 빈 문자열 입 니 다.test -n $var 길이 가 0 이기 때문에 1 (가짜) 로 돌아 가 야 한다.그러나 이 때 var 가 빈 문자열 이 든 아니 든 실제 값 0 으로 돌아 갑 니 다.그러나 더 블 따옴표 (작은 따옴표 가 될 수 없 음 을 주의 하 세 요), 즉 test -n "$var" 를 더 하면 효 과 는 기한 내 에 var 가 비어 있 을 때 만 실제 값 0 으로 돌아 갈 수 있 습 니 다.옵션 -z (zero 의 줄 임 말 로 길이 가 0 으로 이해) 참조 변 수 를 추가 할 때 따옴표 를 추가 하 든 말 든 상관 없습니다.
테스트 파일
테스트 파일 은 대량의 옵션 을 사용 해 야 합 니 다. 여 기 는 제 가 자주 사용 하 는 것 만 쓰 겠 습 니 다. 다른 분 들 은 스스로 man test단일 파일 에 대하 여
옵션
묘사 하 다.
d
디렉토리
f
일반 파일 인지 여부
x
실행 권한 이 있 는 지 여부
r
읽 기 권한 이 있 는 지 여부
w
쓰기 권한 여부
e
존재 여부
s
파일 크기 가 0 보다 클 지 여부
c
문자 장치 파일 인지 여부
b
블록 장치 파일 여부
이상 의 조건 은 성립 될 때 진가 0 을 되 돌려 줍 니 다.구체 적 인 용법 은 다음 과 같다.
test -f hello.c
test -d /home

두 파일 에 대하 여
사용법
묘사 하 다.
test file1 -nt file2
file 1 의 수정 시간 이 file 2 new 보다 높 은 지 테스트 합 니 다 (새)
test file1 -ot file2
file 1 의 수정 시간 이 file 2 old (구) 보다 높 은 지 테스트 합 니 다.
test file1 -ef file2
테스트 두 가 지 는 같은 장치 와 같은 노드 (inode) 수 를 가지 고 있 습 니 다.
마찬가지 로 조건 이 성립 되면 진짜 값 0 을 되 돌려 주 고 그렇지 않 으 면 가짜 값 1 을 되 돌려 준다.여기 file 1, file 2 는 파일 이름 의 문자열 입 니 다.
#    test a.c -nt b.c
#   
a=a.c
b=b.c
test $a -nt $b

더 이상 세부 적 이지 않다.
논리 연산
논리 연산 은 옳 고 그 름 이다.Bash 에 도 &, | 이 있 지만 test 내부 가 아니 라 여러 개의 셸 문 구 를 조합 하 는 데 사 용 됩 니 다. 앞에서 우 리 는 보 았 을 것 입 니 다. & & 앞의 문 구 를 성공 적 으로 실 행 했 을 때 만 뒤의 문 구 를 실행 합 니 다.test 내부 에서:
연산 자
묘사 하 다.
-a
논리 와
-o
논리
!
논리 비
사용법:
test $a -lt $b -a $a -gt $c
test $a -lt $b -o $a -gt $c
test ! -d sleep.sh && echo Yes #  sleep.sh    ,   Yes

사실 풀 버 전 은 이렇다.
test $a -lt $b -a test $a -gt $c
test $a -lt $b -o test $a -gt $c 

간략화 판 test
이 부분 을 다 읽 은 후에 너 는 아마 놀 랄 것 이다. 왜 진작 나 에 게 알려 주지 않 았 니?하하.
사실 위의 모든 test 명령 은 괄호 로 바 꿀 수 있 습 니 다.예 를 들 면
test -f hello.c

되다
[ -f hello.c ]

어 때, 편 하지?주의해 야 할 것 은 괄호 와 표현 식 앞 뒤 에 각각 빈 칸 간격 이 있 습 니 다.버 리 지 마.실제 적 으로 는 [스페이스 바 - f hello. c 스페이스 바]
다른 주의 점 은 괄호 의 논리 표현 식 입 니 다. 예 를 들 어
test $a -lt $b -a $a -gt $c

되다
[ $a -lt $b -a $a -lt $c ]

또 하나의 연산 자 [[[] 는 &, | 을 사용 하여 표현 식 의 논리 연산 을 지원 합 니 다. [] 와 [] 두 가지 구체 적 인 차 이 는 다음 과 같 습 니 다.http://www.cnblogs.com/include/archive/2011/12/09/2307905.html
test 는 Shell 의 외부 명령 이 고 [ ] 는 Shell 에 내 장 된 연산 자 입 니 다.
이 시리즈 (Bash 스 크 립 트 돌리 기) 에 더 많은 글 이 있 습 니 다. 방문 하 십시오:http://blog.csdn.net/column/details/wanbash.html

좋은 웹페이지 즐겨찾기