셸 프로 그래 밍 (3) - for 순환, while 순환, break, continue, exit

[toc]
순환
일련의 명령 을 반복 해서 실행 하 는 것 은 프로 그래 밍 에서 흔히 볼 수 있다.일반적으로 특정한 조건 에 도달 할 때 까지 명령 을 반복 해 야 합 니 다. 예 를 들 어 특정한 디 렉 터 리 에 있 는 모든 파일, 시스템 에 있 는 모든 사용자 또는 특정한 텍스트 파일 의 모든 줄 을 처리 해 야 합 니 다.
흔히 볼 수 있 는 두 가지 순환 은 스 크 립 트 에서 보편적으로 사용 된다.
for 순환 while 순환
문법: for 변수 이름 in 조건;do …; done
for var in list
do
  commands
done

 list   ,             

예제 1: for 순환 으로 1 - 100 의 구 화 를 작성 합 니 다.
생각:
  • [] 우선 1 - 100 순환
  • [] 한 번 순환 하고 sum
  • 에 값 을 부여 합 니 다.
  • [] 출력 sum 의 값
  • seq 이것 이 바로 1 - 100 이 숫자 들 을 옮 겨 다 니 는 것 이다.
  • [root@xavi ~]# !vim
    vim sum01.sh
    
    #!/bin/bash
    sum=0
    for i in `seq 1 100`
    do
       sum=$[ $sum+$i ]
       echo $i
    done
    echo $sum

    예제 2: 디 렉 터 리 나 파일 을 옮 겨 다 니 기
    #!/bin/bash
    cd /etc/            //                ,        ,  ,       
    for a in `ls /etc/`     //  /etc  
    do
        if [ -d $a ]        //             
        then
        ls -d $a    //     ,          +   
        fi
    done
    [root@xavi ~]# !vim
    vim for02.sh
    
    #!/bin/bash
    cd /etc/
    for a in `ls /etc/`
    do
       [ -d $a ] && ls $a
     #        ,           
       if [ -d $a ]
       then
           echo $a
           ls $a
       fi
    done
    ~             

    특수 for 순환 예제: list 순환 시 스페이스 바 나 리 턴 부 호 를 구분자 로 합 니 다.
    [root@xavi ~]# mkdir xavi
    [root@xavi ~]# cd xavi/
    [root@xavi xavi]# ls
    [root@xavi xavi]# touch 1 2
    [root@xavi xavi]# touch 3\ 4.txt
    [root@xavi xavi]# ls
    1  2  3 4.txt
    [root@xavi xavi]# for i in `ls ./`; do echo $i ; done
    1
    2
    3
    4.txt // 3 4.txt          

    2. while 순환
    문법:
    while test command
    do
      other commands
      done

    사례 1: 시스템 부하 모니터링 스 크 립 트 작성
    #!/bin/bash
    while :         //:       ,    ture,
    do
        load=`w|head -1|awk -F 'load average: ' '{print $2}'|cut -d. -f1`
    if [ $load -gt 10 ]
    then
        top|mail -s "load is high: $load" [email protected]
    fi
    sleep 30
    //                ,    30       。    sleep    30  。      。。。
    done

    사례 2: 사용자 와 의 상호작용 을 통 해 하나의 값 을 얻 고 판단 한다.
    사용자 가 입력 한 숫자 를 출력 합 니 다.
  • [] 우선 사용자 가 입력 하지 않 으 면 어떻게 합 니까?
  • [] 사용자 가 순 숫자 를 입력 하지 않 으 면 어 떡 하지?
  • [] 사용자 가 입력 한 숫자 에 따라 출력 합 니 다.
  • #!/bin/bash
    while :
    do
        read -p "Please input a number: " n
        if [ -z "$n" ]
        then
            echo "you need input sth."
            continue
        fi
        n1=`echo $n|sed 's/[0-9]//g'`
        if [ -n "$n1" ]  // -n = ! -z ,      
        then
            echo "you just only input numbers."
            continue
        fi
        break
    done
    echo $n
    
  • [] contine: 사용자 가 입력 하지 않 았 을 때 먼저 힌트 를 준 다음 에 계속 입력 하 게 합 니 다.입력 이 진정한 숫자 일 때 까지 if 문 구 를 뛰 어 내 립 니 다.
  • [] break: 진정한 숫자 라면 전체 while 문 구 를 뛰 어 넘 습 니 다.

  • 3. break 의 용법
    예시:
    #! /bin/bash
    
    for i in `seq 1 5`
    do 
        echo $i
    if [ $i == 3 ]
    then
        break
    fi
    echo $i
    done
    echo aaa

    실행 절 차 는 다음 과 같다.
    [root@xavi xavi]# sh -x break.sh
    ++ seq 1 5
    + for i in '`seq 1 5`'
    + echo 1
    1
    + '[' 1 == 3 ']'
    + echo 1
    1
    + for i in '`seq 1 5`'
    + echo 2
    2
    + '[' 2 == 3 ']'
    + echo 2
    2
    + for i in '`seq 1 5`'
    + echo 3
    3
    + '[' 3 == 3 ']'
    + break
    + echo aaaa
    aaaa

    브레이크 를 만나면 현재 순환 에서 벗 어 나 다음 단계 로 넘 어 가 는 것 이다.
    4. continue 의 용법:
    contine 아래 코드 를 무시 하고 다음 순환 을 진행 합 니 다.
    #! /bin/bash
    
    for i in `seq 1 5`
    do 
        echo $i
    if [ $i == 3 ]
    then
        continue
    fi
    echo $i
    done
    echo aaa

    실행 결 과 는 다음 과 같 습 니 다.
    1
    1
    2
    2
    3
    4
    4
    5
    5
    aaa

    contine 까지 실 행 될 때 아래 의 모든 문 구 는 무시 한 다 는 것 이다.다음 for 순환 을 직접 진행 하 였 습 니 다.
    5. exit 전체 스 크 립 트 종료
    #! /bin/bash
    
    for i in `seq 1 5`
    do 
        echo $i
    if [ $i == 3 ]
    then
        exit
    fi
    echo $i
    done
    echo aaa

    실행 절 차 는 다음 과 같다.
    ++ seq 1 5
    + for i in '`seq 1 5`'
    + echo 1
    1
    + '[' 1 == 3 ']'
    + echo 1
    1
    + for i in '`seq 1 5`'
    + echo 2
    2
    + '[' 2 == 3 ']'
    + echo 2
    2
    + for i in '`seq 1 5`'
    + echo 3
    3
    + '[' 3 == 3 ']'
    + exit
  • [] 3 까지 직진 하면 바로 스 크 립 트 를 종료 합 니 다.
  • 좋은 웹페이지 즐겨찾기