셸 스 크 립 트 프로 그래 밍 학습 의 길 - case 문장

7505 단어 linuxshell
1. case 구조 조건문 문법
case 문장 은 실제 적 으로 규범 화 된 다 분지 if 문장 으로 문자열 변수의 값 은 여러 개의 '|' 파이프 기호 로 구 분 될 수 있다.마지막 변수 값 의 형식, 변수 값 과 ";"두 분 호 는 한 쌍 입 니 다. 마지막 변수의 값 을 추출 하 더 라 도 항상 이러한 형식의 완전 성 을 유지 해 야 합 니 다.
case “     ”in

    1)
         1…
       ;;
    2| 3| 4)
         2…
       ;;
  *)
         3…
       ;;    
esac

중국어 프로 그래 밍 문법:
case “      ”in

     )
          …
       ;;
        )
          …
   ;; 
     |   |   )
               …
       ;;    
     *)
       good bye!!!
       ;;
esac

2. 간단 한 케이스 스 크 립 트
입력 1, 2, 3 각각 출력 에 대응 하 는 값
[root@shellbiancheng jiaobenlianxi]# cat case01.sh 
#!/bin/bash
usage() {
echo $"Usage: $0 {1|2|3}" contents
exit 1
}

num() {
case "$1" in
1)echo "1"
;;
2)echo "2"
;;
3)echo "3"
;;
 *)usage
;;
esac
}

main() {
    if [ $# -ne 1 ];then
    usage    
    fi    
    num $1
}

main $*

3. 스 크 립 트 를 실행 하여 과일 메뉴 를 다음 과 같이 인쇄 합 니 다.
a.apple
b.pear
c.banana
d.cherry
사용자 가 과일 을 선택 할 때 인쇄 는 선택 한 과일 이 무엇 인지 알려 주 고 선택 한 과일 에 색 을 더 해 준다.case 문장 으로 실현 을 요구 하 다.
[root@shellbiancheng jiaobenlianxi]# cat menufruit.sh 
#!/bin/bash
RED_COLOR='\E[1;31m'
GREEN_COLOR='\E[1;32m'
YELLOW_COLOR='\E[1;33m'
BLUE_COLOR='\E[1;34m'
PINK='\E[1;35m'
SHAN='\E[31;5m'           echo –e   
RES='\E[0m'
menu(){
cat <

4. 사례
nginx 관리 명령 은 다음 과 같 습 니 다:
시작:/usr/local/nginx/sbin/nginx
정지:/usr/local/nginx/sbin/nginx – s stop
다시 불 러 오기:/usr/local/nginx/sbin/nginx – s reload
케이스 스 크 립 트 로 nginx 서비스 시작 을 시 뮬 레이 션 하 십시오. 닫 기:
/etc/init.d/nginx {start|stop|restart|reload}
chkconfig 를 통 해 관리 할 수 있 습 니 다.
해결 방향:
사실은 매우 간단 합 니 다. 우 리 는 네 개의 모듈 로 나 눌 수 있 습 니 다. 첫 번 째 모듈 은 서비스 모듈 을 시작 하 는 것 입 니 다. 두 번 째 모듈 은 서비스 모듈 을 닫 는 것 이 고 세 번 째 모듈 은 서비스 모듈 을 다시 시작 하 는 것 입 니 다. 네 번 째 모듈 은 부 드 러 운 재 부팅 모듈 입 니 다.먼저 함수 로 이 네 개의 모듈 을 각각 실현 하고 이 함수 들 을 호출 하면 됩 니 다. 마지막 으로 켜 기 자동 시작 을 설정 하 는 것 입 니 다. 이것 은 chkconfig 명령 을 사용 해 야 합 니 다.먼저 우리 가 쓴 시작 스 크 립 트 를/etc/init. d/아래 에 놓 고 시작 하 는 아래 에 놓 아야 합 니 다.
(1) 먼저 시작 스 크 립 트 의 이름 을 바 꾼 다음/etc/init. d/아래 에 놓 고 실행 권한 을 줍 니 다.
[root@shellbiancheng jiaobenlianxi]# cp nginx.sh nginx
[root@shellbiancheng jiaobenlianxi]# cp nginx /etc/init.d/
[root@shellbiancheng jiaobenlianxi]# chmod +x /etc/init.d/nginx 
[root@shellbiancheng jiaobenlianxi]# ll /etc/init.d/nginx 
 -rwxr-xr-x. 1 root root 981 4    2 04:16 /etc/init.d/nginx

(2) 자동 시작 추가
자동 시작 을 추가 하기 전에 우 리 는 서비스의 자동 시작 이 보통 어느 운행 단계 에 있 는 지 알 아야 한다.network 의 경우 network 서비스 가 작 동 하 는 운행 단 계 를 봅 니 다.
[root@shellbiancheng jiaobenlianxi]# chkconfig --list network
network    0:      1:      2:      3:      4:      5:      6:  

실행 단계:
0:  ;

1:     ;

2:     ,  NFS;

3:       ;

4:   ;

5:X11,      ;

6:  。

위 는 명령 행 에서 network 의 작 동 단 계 를 보 는 것 입 니 다. 아래 는 network 에서 스 크 립 트 를 시작 하여 network 의 작 동 단 계 를 보 겠 습 니 다.
[root@shellbiancheng jiaobenlianxi]# head -5 /etc/init.d/network 
#! /bin/bash
#
# network   Bring up/down networking
#
# chkconfig: 2345 10 90
# description: Activates/Deactivates all network interfaces configured to \

우 리 는 위의 chkconfig 줄 을 보 았 습 니 다. 이것 은 매우 중요 합 니 다. 이것 은 켜 는 시작 순 서 를 기본적으로 2345 로 정 의 했 습 니 다. 10 은 서비스 켜 는 시작 순 서 를 대표 합 니 다. 90 은 서비스의 꺼 진 시작 순 서 를 대표 합 니 다. chkconfig 와 description 이 줄 을/etc/init. d/아래 nginx 의 시작 스 크 립 트 에 복사 합 니 다.우 리 는 먼저/etc/rc. d/rc 3. d/안 으로 가서 사용 하지 않 은 부팅 순 서 를 찾 아 보 겠 습 니 다. S20 이 없 는 것 을 보고 nginx 의 부팅 순 서 를 20 으로 설정 합 니 다.끄 는 순서 도 마찬가지 입 니 다. 끄 는 순 서 를 대문자 K 로 시작 하지 않 고 nginx 의 끄 는 순 서 를 16 으로 설정 합 니 다.
[root@shellbiancheng logs]# ll /etc/rc.d/rc3.d/ |grep S19
lrwxrwxrwx. 1 root root 17 12  30 04:10 S19rpcgssd -> ../init.d/rpcgssd
[root@shellbiancheng logs]# ll /etc/rc.d/rc3.d/ |grep S20

(3) 스 크 립 트 코드 는 다음 과 같 습 니 다.
[root@shellbiancheng jiaobenlianxi]# cat nginx.sh 
#!/bin/bash
# chkconfig: 2345 20 16   
# description: nginx is a http server
#Date: 2018-04-07 
#Author: Create by linzhongniao
#Mail: [email protected] 
#Function:This scripts function is Nginx startup script.
#Version: 1.1  

if [ -f /etc/init.d/functions ];then
     . /etc/init.d/functions
fi
pidfile=/usr/local/nginx/logs/nginx.pid
SHAN='\E[31;5m'
RES='\E[0m'
nginx=/usr/local/nginx/sbin/nginx
RETVAL=0
linzhongniao() {
    RETVAL=$?
    if [ $RETVAL -eq 0 ];then
      action "Nginx is $1" /bin/true
    else
      action "Nginx is $1" /bin/true
    fi
}

start() {
    if [ -f $pidfile ];then
        echo -e ${SHAN}"nginx is running"${RES}
    else
        $nginx
        linzhongniao started    
    fi
    return $RETVAL
}
stop() {
    if [ ! -f $pidfile ];then
        echo -e  ${SHAN}"nginx is stopped"${RES}
    else 
        $nginx -s stop 
        linzhongniao stopped
    fi
    return $RETVAL
}

restart() {
    printf "Restarting Nginx ...
" stop sleep 2 start } reload() { if [ ! -f $pidfile ];then echo -e ${SHAN}"Can't open $pidfile,no such file or directory"${RES} else $nginx -s reload linzhongniao reload fi return $RETVAL } usage() { echo -e ${SHAN}"USAGE:$0 {start|stop|restart|reload}"${RES} } main() { case "$1" in start) start ;; stop) stop ;; restart) restart ;; reload) reload ;; *)usage exit $RETVAL esac } main $1 exit $RETVAL

마지막 으로 chkconfig 에 불 러 옵 니 다. nginx 서비스 시작 을 완료 하고 지정 한 시작 단계 에서 시작 하도록 설정 합 니 다 chkconfig --level
[root@shellbiancheng ~]# chkconfig --add /etc/init.d/nginx
[root@shellbiancheng init.d]# chkconfig nginx on
[root@shellbiancheng init.d]# chkconfig --list nginx
nginx      0:      1:      2:      3:      4:      5:      6:  
       
[root@shellbiancheng init.d]# chkconfig nginx off
[root@shellbiancheng init.d]# chkconfig --list nginx
nginx      0:      1:      2:      3:      4:      5:      6:  

(4) 요약:
1. 스스로 스 크 립 트 를 개발 하여 자동 으로 작 동 하 는 절 차 는 스 크 립 트 를 개발 하고 개발 한 스 크 립 트 를/etc/init. d/디 렉 터 리 에 넣 고 자동 시작 관 리 를 추가 하 는 것 입 니 다.
2. 절차 에서 가장 중요 한 것 은 스 크 립 트 를 개발 하 는 것 입 니 다. 자신 이 개발 한 스 크 립 트 중의 chkconfig: 2345 20 16 줄 에 주의해 야 합 니 다.
3. 스 크 립 트 를/etc/init. d/디 렉 터 리 에 두 고 스 크 립 트 실행 권한 을 부여 합 니 다.
4. 자신 이 쓴 스 크 립 트 는 시스템 서비스 에 -- add 매개 변 수 를 추가 해 야 합 니 다.
5. case 구문 소결
(1) 케이스 문장 은 여러 갈래 의 if 문장 에 해당 하고 케이스 문장의 장점 이 더욱 규범화 되 고 읽 기 쉽다.
(2) 시스템 서비스 시작 스 크 립 트 전송 은 케이스 문 구 를 많이 사용 하고/etc/init. d/rsyslog 의 시작 스 크 립 트 를 참고 합 니 다.
(3) 모든 케이스 문 구 는 if 를 사용 하여 실현 할 수 있 지만 케이스 문 구 는 더욱 규범화 되 고 뚜렷 하 다.
(4) case 문 구 는 일반적으로 서비스의 시작 스 크 립 트 에 적합 하고 범위 가 좁다.if 수치 판단, 비교적 광범 위 하 게 응용.
(5) case 의 변수의 값 이 고정 되 어 있 으 면 start/restart/stop 의 요소 로 적합 합 니 다.
6. 시스템 스 크 립 트 학습 시스템 스 크 립 트 보기
/etc/init.d/functions
함수 라 이브 러 리 함수 설명:http://www.cnblogs.com/image-eye/archive/2011/10/26/2220405.html
/etc/rc.d/rc.sysinit
/etc/init.d/rpcbind
/etc/init.d/nfs
/etc/init.d/httpd

좋은 웹페이지 즐겨찾기