셸 스 크 립 트 학습 의 판단 조건

7707 단어 shell
이전 셸 언어 학습 노트 에 셸 의 몇 가지 판단 문 과 순환 문 구 를 썼 고 셸 언어 판단 문 과 판단 조건 도 간단하게 소개 했다.여기 서 더 공부 하 겠 습 니 다.test 명령 의 테스트 기능
test 명령 은 시스템 파일 과 관련 속성 을 검사 하 는 데 사 용 됩 니 다. 예 를 들 어 특정한 파일 이 존재 하 는 지, 특정한 파일 의 권한 을 검사 하 는 등 입 니 다.현재 디 렉 터 리 에 파일 study 가 존재 하 는 지 판단 하려 면 다음 명령 을 사용 하 십시오.
1
#test -e study

- e 옵션 은 어떤 파일 이 존재 하 는 지 (파일 과 폴 더 포함) 를 테스트 하 는 것 입 니 다. 이 실행 결 과 는 어떠한 정보 도 출력 하지 않 지만, 우 리 는 & & 및 | 를 통 해 관련 정 보 를 보 여줄 수 있 습 니 다. 고 친 명령 은 다음 과 같 습 니 다.
1
#test -e study && echo "exist!" || echo "not exist!"

이 명령 의 역할 은 study 파일 이 존재 할 때 문자열 을 출력 하 는 것 입 니 다. "exist!"존재 하지 않 을 때 출력 문자열 "not exist!"
다음은 test 명령 에서 자주 사용 하 는 테스트 표지 입 니 다.
1. 어떤 파일 이름 의 형식 검사 (존재 여부 및 파일 형식) (test - e filename)
- e: 이 "파일 이름" 이 존재 하 는 지 여부. -d: 이 파일 이름 이 디 렉 터 리 인지 여부 입 니 다. -f  :이 파일 이름 이 일반 파일 인지 여부 입 니 다.b, c, S, p, L 은 블록 장치, 문자 장치, 소켓 파일, 파이프 파일 과 링크 파일 을 말한다.
2. 파일 권한 검사 (test - r filename)
- r: 이 파일 에 읽 을 수 있 는 속성 이 있 는 지 여부 - w: 이 파일 에 쓸 수 있 는 속성 이 있 는 지 - x: 이 파일 에 실행 가능 한 속성 이 있 는 지 - s :이 파일 이 비 공백 파일 인지 여부
3. 두 파일 비교 (test file a nt file b)
- nt: 파일 filea. file 보다b 새 - ot: 파일 filea. file 보다b. 구 - ef: 두 파일 이 같은 파일 인지 판단 하고 하 드 연결 을 판단 할 수 있 습 니 다.(두 파일 이 모두 같은 inode 를 가리 키 는 지 판단 합 니 다)
4. 두 정수 사이 의 판단 (test n1 - eq n2)
- eq: 두 개의 수 는 같다 (equal) - ne: 두 개의 수 는 같 지 않다 (not equal) - lt: 전 자 는 후자 보다 크다 (greater than) - lt: 전 자 는 후자 보다 작다 (less than) - ge: 전 자 는 등 후자 보다 크다 - le: 전 자 는 후자 보다 작다.
5. 판단 문자열
test - z str: 문자열 이 비어 있 는 지 판단 하고 비어 있 으 면 true test - n str: 문자열 이 비어 있 지 않 은 지 판단 하고 왼쪽 길이 비어 있 지 않 으 면 true (- n 도 생략 가능) test stra = str_b 및 test stra != str_b: 두 문자열 이 같 고 같 지 않 은 지 판단 합 니 다.
6. 다 중 판단 조건 (test - r file - a - w file)
- a: and, 두 가지 조건 이 모두 만족 할 때 만 true 를 전송 합 니 다. 즉, file 은 읽 기와 쓰기 권한 이 있 습 니 다. - o: or, 두 가지 조건 이 만족 하면 즉시 true -!:조건 반대, test -! -x file, 즉 file 이 실행 권한 이 없 을 때 만 true 를 전송 합 니 다.
다음은 두 개의 간단 한 셸 스 크 립 트 로 그 기능 을 판단 합 니 다.
1
2
3
4
#!/bin/bash
echo "Please input a filename:"
read -e  filename
(test -e $filename && (test -d $filename && echo "directory" ||( test -f $filename && echo "regular")) )||echo "$filename does not exist"
1
2
3
4
5
6
7
8
9
10
11
12
#!/bin/bash
echo -e "The program will show you that filename is exist which input by you."
read -p "Input a filename:" filename
test -z $filename && echo "You must input a filename." && exit 0
test ! -e $filename && echo "The filename $filename DO NOT exist" && exit 0
test -f $filename && filetype="Regulare file"
test -d $filename && filetype="directory";
test -r $filename && perm="readable"
test -w $filename && perm="$perm writable"
test -x $filename && perm="$perm executable"
echo "The filename:$filename is a $filetype"
echo "And the permission are:$perm"

판단 기호 사용 []
판단 기 호 를 사용 하여 데 이 터 를 판단 할 수 있 습 니 다. 예 를 들 어 특정한 변수 가 비어 있 는 지 확인 할 수 있 습 니 다. [- z $SHELL] 은 괄호 ("[]") 안의 구성 요 소 를 빈 칸 으로 분리 해 야 합 니 다.다음 스 크 립 트 가 있 습 니 다:
1
2
3
4
5
#!/bin/bash
read -p "input you choice:" choice
[ "$choice" == "y" ] || [ "$choice" == "Y" ] && echo "OK,continue" && exit 0
[ "$choice" == "n" ] || [ "$choice" == "N" ] && echo "Oh,interrupt!" && exit 0
echo "I don't know what is your choice" && exit 0

주: 이 내용 들 은 참고 한 라 는 책의 일부 장 입 니 다.
이원 비교 연산 자, 변수 비교 또는 숫자 비교. 숫자 와 문자열 의 차이 에 주의 하 십시오.
정수 비교
예 를 들 어: if ["$a" - eq"$b" $b "] - ne 은 다음 과 같 같 지 않 습 니 다. 예 를 들 어, if [" $a "- ne" $b "" $b "] - gt 는 다음 과 같 습 니 다. if [" $a "-" $a "- ge" $b "$b"] - lt 는 다음 과 같 습 니 다. if ["$a" - lt "- lt" $- t "$b" $b "] - - le 은 다음 과 같 습 니 다. if [" $a "- - - - - - le" $b "- b" $a "- - $b" $b "$b" 와 같 습 니 다. 다음 과 같 습 니 다. ("$a" $b "$b" $b "$b" $b ")) <), 예: (" $a "< =" $b ") > 이상(괄호 가 필요 합 니 다), 예 를 들 어: ("$a" > "$b") > = 은 다음 과 같 습 니 다. ("$a" > = "$b")
문자열 비교 = 예 를 들 어 if ["$a" = "$b"] = 과 같 습 니 다. 예 를 들 어 if ["$a" = = "$b"] 와 같 습 니 다.\ # File globbing 과 word splitting 은 5 ["$a" = "z *"] 가 발생 합 니 다. \ # $a 가 z * (문자 일치) 라면 결 과 는 true 로 설명 합 니 다. File globbing 은 파일 에 관 한 속기 법 입 니 다. 예 를 들 어 "* c" 는 다음 과 같 습 니 다. 그러나 file globbing 은 엄격 한 정규 표현 식 이 아 닙 니 다. 대부분의 경우 구조 가 비슷 하지만! = 같 지 않 습 니 다. 예 를 들 어 if ["$a"! ="$b"] 이 조작 부 호 는 [[] 구조 에서 패턴 을 사용 하여 일치 합 니 다. < 작 음, ASCII 알파벳 순서 에서. 예 를 들 어: if [["$a" < "$b"] if ["$a" / < $b "] 주의: [] 구조 에서" < "는 전의 되 어야 합 니 다. > 보다 크 고 ASCII 알파벳 순서 에서. 예 를 들 어: if [" $a ">" $b "] if [" $a "/ >" $b "]구조 에서 '>' 는 전 의 를 받 아야 합 니 다. 구체 적 으로 example 26 - 11 을 참고 하여 이 연산 자 를 사용 하 는 예 를 보십시오. - z 문자열 은 'null' 입 니 다. 길이 가 0 입 니 다. - n 문자열 은 'null' 이 아 닙 니 다. 주의: - n 을 사용 하여 [] 구조 에서 테스트 하려 면 '변 수 를 일 으 켜 야 합 니 다. 사용 되 지 않 은 문자열 을 사용 해 야 합 니 다! - z 또는 사용 되 지 않 은 문자열 자 체 를 [] 에 두 어야 합 니 다.구조 적 으로. 일반적인 상황 에서 일 을 할 수 있 지만 안전 하지 않 습 니 다. 문자열 을 테스트 하 는 데 익숙 한 것 은 좋 은 습관 입 니 다.
이원 비교 연산 자, 변수 비교 또는 숫자 비교. 숫자 와 문자열 의 차이 에 주의 하 십시오.
정수 비교
예 를 들 어: if ["$a" - eq"$b" $b "] - ne 은 다음 과 같 같 지 않 습 니 다. 예 를 들 어, if [" $a "- ne" $b "" $b "] - gt 는 다음 과 같 습 니 다. if [" $a "-" $a "- ge" $b "$b"] - lt 는 다음 과 같 습 니 다. if ["$a" - lt "- lt" $- t "$b" $b "] - - le 은 다음 과 같 습 니 다. if [" $a "- - - - - - le" $b "- b" $a "- - $b" $b "$b" 와 같 습 니 다. 다음 과 같 습 니 다. ("$a" $b "$b" $b "$b" $b ")) <), 예: (" $a "< =" $b ") > 이상(괄호 가 필요 합 니 다), 예 를 들 어: ("$a" > "$b") > = 은 다음 과 같 습 니 다. ("$a" > = "$b")
문자열 비교 = 예 를 들 어 if ["$a" = "$b"] = 과 같 습 니 다. 예 를 들 어 if ["$a" = = "$b"] 와 같 습 니 다.\ # File globbing 과 word splitting 은 5 ["$a" = "z *"] 가 발생 합 니 다. \ # $a 가 z * (문자 일치) 라면 그 결 과 는 true 로 설명 합 니 다. File globbing 은 파일 에 관 한 속기 법 입 니 다. 예 를 들 어 "* c" 는 다음 과 같 습 니 다. 그러나 file globbing 은 엄격 한 정규 표현 식 이 아 닙 니 다. 절대 다수의 경우 구조 가 비슷 하지만! = 같 지 않 습 니 다. 예 를 들 어 if ["$a"! = "$b "] 이 조작 부 호 는 [[] 구조 에서 패턴 이 일치 합 니 다.구조 에서 '>' 는 전 의 를 받 아야 합 니 다. 구체 적 으로 example 26 - 11 을 참고 하여 이 연산 자 를 사용 하 는 예 를 보십시오. - z 문자열 은 'null' 입 니 다. 길이 가 0 입 니 다. - n 문자열 은 'null' 이 아 닙 니 다. 주의: - n 을 사용 하여 [] 구조 에서 테스트 하려 면 '변 수 를 일 으 켜 야 합 니 다. 사용 되 지 않 은 문자열 을 사용 해 야 합 니 다! - z 또는 사용 되 지 않 은 문자열 자 체 를 [] 에 두 어야 합 니 다.구조 적 으로. 일반적인 상황 에서 일 을 할 수 있 지만 안전 하지 않 습 니 다. 문자열 을 테스트 하 는 데 익숙 한 것 은 좋 은 습관 입 니 다.

좋은 웹페이지 즐겨찾기