셸 프로 그래 밍 4 (종료, 테스트, 판단)

4427 단어
1 종료 상태
정의.
 Linux 시스템 에 서 는 명령 이 실 행 될 때마다 시스템 이 종료 상태 로 돌아 갑 니 다.이 종료 상 태 는 명령 운행 의 정확 여 부 를 판단 하 는 데 사용 되 는 정수 치 를 사용 합 니 다.종료 상 태 는 보통 미리 정 의 된 변수 $에 저 장 됩 니까?맞다
종료 상태 값 이 0 이면 명령 실행 에 성 공 했 음 을 표시 합 니 다.
종료 상태 값 이 0 이 아 닐 경우 명령 실행 에 실 패 했 음 을 표시 합 니 다.
마지막 으로 실 행 된 명령 의 종료 상태 값 은 내 장 된 변수 '$?' 에 저장 되 어 있 기 때문에 echo 문 구 를 통 해 명령 이 실 행 됐 는 지 테스트 할 수 있 습 니 다.
 
 종료 상태 명령 설정
 비교적 복잡 한 스 크 립 트 를 작성 할 때 오류 포착 메커니즘 을 고려 해 야 한다. 즉, 스 크 립 트 의 문장 이 실 행 될 때 스 크 립 트 는 오 류 를 처리 할 수 있다.
스 크 립 트 에서 종료 상 태 를 설정 하려 면 exit 명령 과 같 아야 합 니 다. 같은 형식 과 대응 하 는 의 미 는 다음 과 같 습 니 다.
exit 0 :  스 크 립 트 가 성공 적 으로 실행 되 었 음 을 표시 합 니 다. 오류 없 이 되 돌아 오 는 경우 도 true 로 되 돌아 갑 니 다.
exit 1  나타내다 실행 에 실 패 했 을 때 오류 가 되 돌 아 왔 습 니 다. 이 경우 되 돌아 오 는 값 이 false 가 될 수도 있 습 니 다.
0 1 외 에 도 다른 숫자 가 있 지만 돌아 온 상태 가 0 이 아니면 시스템 은 스 크 립 트 실행 에 실패 했다 고 볼 수 있 습 니 다.
exit 명령 을 사용 하여 종료 상 태 를 설정 할 때 스 크 립 트 가 어디 에 실행 되 든 exit 명령 을 만나면 스 크 립 트 는 즉시 종료 상 태 를 설정 하고 스 크 립 트 를 저장 합 니 다.
eg1
#!/bin/bash

function usage()
{
 echo "error : must have a param"
 echo "$0 param. . . . ."
 return 1
}

if [ $# = 0 ]
  then 
   usage
   exit 1
fi

echo $1
exit 0

실행 결과
anders@anders-virtual-machine:~/code/shell/exit$ ./eg1.sh  error : must have a param ./eg1.sh param. . . . . anders@anders-virtual-machine:~/code/shell/exit$ echo $? 1  스 크 립 트 오류 종료anders@anders-virtual-machine:~/code/shell/exit$ ./eg1.sh abc abc anders@anders-virtual-machine:~/code/shell/exit$ echo $? 0    오류 없 음 종료
return 과 exit 의 차 이 를 주의해 야 합 니 다.
return 은 언어 단계 입 니 다. 스 택 을 호출 하 는 반환 을 표시 합 니 다.exit 는 시스템 호출 단계 로 프로 세 스 의 끝 을 표시 합 니 다.
exit 함 수 는 프로그램 을 종료 하고 프로그램의 한 상 태 를 OS 에 되 돌려 주 는 것 입 니 다. 이 상 태 는 프로그램의 실행 정 보 를 표시 합 니 다.
eg2
#!/bin/bash

function usage()
{
 echo "error : must have a param"
 echo "$0 param. . . . ."
 exit 1
}

if [ $# = 0 ]
  then 
   usage
   exit 1
fi

echo $1
exit 2

실행 결과
error : must have a param ./eg2.sh param. . . . . anders@anders-virtual-machine:~/code/shell/exit$ echo $? 1 anders@anders-virtual-machine:~/code/shell/exit$ ./eg2.sh 1 1 anders@anders-virtual-machine:~/code/shell/exit$ echo $? 2
2 파일 테스트
파일 테스트 는 두 가지 측면 을 포함 합 니 다. 
1 기본 테스트 파일, 디 렉 터 리 존재 여부, 파일 형식 포함 파일 길이 등
2 파일 권한 테스트 눈금 쓰기 실행 기다리다
(1) 파일 기본 테스트:
  -d. 대상 파일 이 존재 하 는 지, 디 렉 터 리 인지 테스트 합 니 다.
-f  대상 파일 이 존재 하 는 지 테스트 하고 일반 파일 입 니 다.
  -L 대상 파일 이 존재 하 는 지, 연결 파일 인지 테스트 합 니 다.
-b 대상 파일 이 존재 하 는 지, 블록 장치 파일 인지 테스트 합 니 다.
-c 대상 파일 이 존재 하 는 지, 문자 장치 파일 인지 테스트 합 니 다.
-e 대상 파일 존재 여부 테스트 
등등
형식: [commmand param]
  eg
anders@anders-virtual-machine:~/code/shell/exit$ [ -d/home/anders/] anders@anders-virtual-machine:~/code/shell/exit$ echo $? 0
if while 등 과 자주 결합 하여 사용 합 니 다.
(2) 파일 권한 테스트:
-w  지정 한 파일 이 존재 하 는 지 판단 하고 쓰기 권한 이 있 습 니 다.
- r 지정 한 파일 이 존재 하 는 지 판단 하고 읽 기 권한 이 있 습 니 다.
- x 지정 한 파일 이 존재 하 는 지 판단 하고 실행 가능 한 권한 이 있 음
- u 지정 한 파일 에 SUID 권한 이 있 는 지 판단
3 변수 테스트
변수 가 정의 되 었 는 지 테스트 하려 면 명령 z 를 사용 해 야 합 니 다. 
정의 되 지 않 은 변수 에 대해 서 는 숫자 0 을 되 돌려 줍 니 다.
정 의 된 변수 에 대해 서 는 숫자 1 을 되 돌려 줍 니 다.
eg
anders@anders-virtual-machine:~/code/shell/exit$ [ -z $NAME ] anders@anders-virtual-machine:~/code/shell/exit$ echo $? 0 anders@anders-virtual-machine:~/code/shell/exit$ NAME=ANDERS anders@anders-virtual-machine:~/code/shell/exit$ [ -z $NAME ] anders@anders-virtual-machine:~/code/shell/exit$ echo $? 1
4 문자열 과 수치 테스트
문자열 연산 자 테스트
= 두 문자열 이 동일 한 지 판단 같 으 면 진짜 숫자 0 으로 되 돌아 갑 니 다.
!= 같 지 않 은 가?
n. 문자열 이 비어 있 는 지 시험 합 니 다.
anders@anders-virtual-machine:~/code/shell/exit$ [ "aa"= "aa"] anders@anders-virtual-machine:~/code/shell/exit$ echo $? 0 anders@anders-virtual-machine:~/code/shell/exit$ [ "aa"= "AA"] anders@anders-virtual-machine:~/code/shell/exit$ echo $? 1
수치 테스트
수치 테스트 명령 은 다음 과 같다.
eq 두 숫자 가 같 으 면 진짜 로 되 돌아 갑 니 다.
네 는 같 지 않다.
lt 첫 번 째 수 는 두 번 째 수 보다 작다.
이하
lt 첫 번 째 수 는 두 번 째 수 보다 크다.
ge  ... 보다 크다
5 논리 연산 자
 a   논리 와  &&
논리   ||
! 논리 비
파일 읽 기 및 쓰기 가능
anders@anders-virtual-machine:~/code/shell/exit$ [ -r /etc/passwd -a -w /etc/passwd ]
anders@anders-virtual-machine:~/code/shell/exit$ echo $?
1

좋은 웹페이지 즐겨찾기