제어 흐름 구조 - case

5379 단어 Shell
[size = medium] [b] case 문장 [/b] [/size]
case 문 구 는 다 중 선택 문 입 니 다.케이스 문 구 를 사용 하여 하나의 패턴 과 값 을 일치 시 킬 수 있 습 니 다. 일치 하면 일치 하 는 명령 을 수행 할 수 있 습 니 다.case 구문 형식 은 다음 과 같 습 니 다.
case 值 in
模式1 )
命令1
. . .
;;
模式2 )
命令2
. . .
;;
esac

케이스 작업 방식 은 위 와 같다.값 을 얻 으 려 면 단어 in 이 어야 합 니 다. 모든 모드 는 오른쪽 괄호 로 끝나 야 합 니 다.수 치 는 변수 나 상수 일 수 있다.일치 하 는 값 이 특정한 모드 에 부합 되 는 것 을 발견 하면 그 동안 모든 명령 이 실 행 될 때 까지 실 행 됩 니 다.
값 을 추출 하면 일치 하 는 모든 모드 를 검사 합 니 다.패턴 이 일치 하면 일치 모드 에 해당 하 는 명령 을 실행 한 후 다른 모드 를 계속 하지 않 습 니 다.일치 하 는 모드 가 없 으 면 별표 * 로 이 값 을 캡 처 하고 다른 입력 을 받 습 니 다.모드 부분 에 메타 문 자 를 포함 할 수 있 습 니 다. 명령 행 파일 확장자 예 에서 사 용 했 던 일치 하 는 모드 형식 과 같 습 니 다. 즉,:
[table]
| * | 임의의 문자. |
|?|임의의 단일 문자.
| [..] | 클래스 나 범위 의 임의의 문자 입 니 다. |
[/table]
[b] 간단 한 케이스 문 구 를 보 겠 습 니 다. [/b]
/home/l/g/tomotoboy >cat caseselect
#!/bin/sh
#caseselect
echo - n "Enter a number from 1 to 5 :"
read ANS
case $ANS in
1) echo "you select 1"
;;
2) echo "you select 2"
;;
3) echo "you select 3"
;;
4) echo "you select 4"
;;
5) echo "you select 5"
;;
*) echo "`basename $0`: This is not between 1 and 5" >&2
;;
esac

/home/l/g/tomotoboy >caseselect
- n Enter a number from 1 to 5 :
4
you select 4
/home/l/g/tomotoboy >caseselect
- n Enter a number from 1 to 5 :
7
caseselect: This is not between 1 and 5

[b] 일치 모드 사용 | [/b]
/home/l/g/tomotoboy >cat caseterm
#!/bin/sh
#caseterm
echo "choices are.. vt100, vt102, vt220"
echo -n "enter your terminal type :"
read TERMINAL
case $TERMINAL in
vt100|vt102) TERM=vt100
;;
vt220) TERM=vt220
;;
*) echo "`basename $0`: Unknown reponse" >&2
echo "setting it to vt100 anyway,so there"
TERM=vt100
;;
esac
export TERM
echo "Your terminal is set to $TERM'
"caseterm" 17 lines, 348 characters

/home/l/g/tomotoboy >caseterm
choices are.. vt100, vt102, vt220
-n enter your terminal type :
vt100
Your terminal is set to vt100'

[b] 힌트 입력 y 또는 n [/b]
케이스 의 효과 적 인 용법 은 프로 세 스 를 계속 할 지 여 부 를 결정 하기 위해 사용자 응답 을 알려 주 는 것 입 니 다.n 을 계속 처리 하기 위해 y 를 입력 하 는 것 을 알려 줍 니 다.사용자 가 Y, y 또는 yes 를 입력 하면 case 문장의 뒷부분 을 계속 실행 합 니 다.사용자 가 N, n 또는 no 또는 다른 응답 을 입력 하면 스 크 립 트 를 종료 합 니 다.
/home/l/g/tomotoboy >cat caseans
#!/bin/sh
#caseans
echo -n "Do you wish to proceed [y..n]"
read ANS
case $ANS in
y|Y|yes|Yes) echo "yes is selected"
;;
n|N|no|No) echo "no is selectd"
;;
*) echo "`basename $0` : Unknown response" >&2
;;
esac

/home/l/g/tomotoboy >caseans
-n Do you wish to proceed [y..n]
y
yes is selected

[b] case 와 명령 매개 변수 가 [/b] 로 전 달 됩 니 다.
/home/l/g/tomotoboy >cat >> caseparam
#!/bin/sh
#caseparam
if [ $# != 1 ];then
echo "Usage:`basename $0` [start|stop|help]" >&2
fi
OPT=$1
case $OPT in
start) echo "starting..`basename $0`"
;;
stop) echo "stopping..`basename $0`"
;;
help) echo "stopping..`basename $0`"
echo "Usage:`basename $0` [start|stop|help]"
;;
*) echo "stopping..`basename $0`"
echo "Usage:`basename $0` [start|stop|help]"
;;
esac
/home/l/g/tomotoboy >chmod u+x caseparam
/home/l/g/tomotoboy >caseparam help
stopping..caseparam
Usage:caseparam [start|stop|help]
/home/l/g/tomotoboy >caseparam start
starting..caseparam

[b] 입력 을 캡 처 하고 빈 명령 을 실행 합 니 다 [/b]
일치 하 는 모드 에서 명령 을 추가 할 필 요 는 없습니다. 만약 당신 이 무엇 을 하고 싶 지 않 았 다 면, 더 이상 처리 하기 전에 의외 의 응답 을 걸 러 내 는 것 이 좋 은 방법 입 니 다.한 회계 부서 에 대응 하 는 계 정 보고 서 를 실행 하려 면 먼저 실행 보고서 의 유형 을 결정 하기 전에 사용자 가 효과 적 인 부서 번 호 를 입력 하 는 것 을 확인 하고 모든 가능 한 값 과 일치 하 며 다른 값 은 유효 하지 않 습 니 다.케이스 로 상술 한 기능 을 쉽게 실현 할 수 있다.아래 스 크 립 트 에서 사용자 가 부서 번 호 를 입력 하 는 것 이 234, 453, 655 또는 454 가 아니라면 사용 자 는 종료 하고 사용 가능 한 정 보 를 되 돌려 줍 니 다.사용자 의 유효한 부서 번호 에 응답 하면 스 크 립 트 는 같은 기술 로 보고서 형식 을 얻 고 case 문장 끝 에 유효한 부서 번호 와 보고서 형식 을 표시 합 니 다.스 크 립 트 는 다음 과 같 습 니 다:
#!/bin/sh
# casevalid
echo -n "enter the account dept No: "
read ACC
case $ACC in
234);;
453);;
655);;
454);;
*) echo "basename $01`: Unknon dept No"
echo "try..234,453,655,454"
exit 1
;;
esac
#if we are here, then we have a validdated the dept no
echo " 1 . post"
echo " 2 . prior"
echo -n "enter the type of report: "
read ACC_TYPE
case $ACC_TYPE in
1)TYPE=post;;
2)TYPE=prior;;
*) echo "`basename $0`: Unknown account type." >&2
"casevalid" 29 lines, 665 characters
/home/l/g/tomotoboy >casevalid
-n enter the account dept No:
454
1 . post
2 . prior
-n enter the type of report:
1
now running report for dept 454 for the type post

좋은 웹페이지 즐겨찾기