Shell 프로 그래 밍 - 10 - Shell 의 순환 문

5811 단어
『 8195 』 순환 문 구 는 하나의 명령 이나 한 조 의 명령 을 반복 적 으로 집행 하 는 데 자주 사용 되 며 종료 조건 에 이 르 면 집행 을 중지 합 니 다.셸 에서 흔히 볼 수 있 는 순환 명령 은 while, until, for, select 등 이 있 습 니 다.
while 구문
기초 문법
while 
do
  语句
done

while 순환 읽 기 파일
  • 1. exec 사용
  • exec < FILE
    while read line
    do
      command
    done
    
  • 2. cat 와 파이프 사용
  • cat FILEPATH/FILE | while read line
    do
      command
    done
    
  • 3. done 후 재 설정 사용
  • while read line
    do
      command
    done < FILE
    

    while 예시
    1. 숫자 인쇄
    [root@localhost Test]# cat while.sh
    #!/bin/bash
    a=$1
    while [ ${a} -ge 0 ]
    do
      echo "Current number is:" ${a}
      a=$((a-1))
    done
    
    [root@localhost Test]# bash while.sh 5
    Current number is: 5
    Current number is: 4
    Current number is: 3
    Current number is: 2
    Current number is: 1
    Current number is: 0
    

    2. 파일 읽 기
    # 读取网卡配置文件
    [root@localhost Test]# cat readnet.sh
    #!/bin/bash
    while read line
     do
      echo ${line}
     done < /etc/sysconfig/network-scripts/ifcfg-ens5f1
    
    [root@localhost Test]# bash readnet.sh
    TYPE=Ethernet
    PROXY_METHOD=none
    BROWSER_ONLY=no
    BOOTPROTO=static
    DEFROUTE=yes
    IPV4_FAILURE_FATAL=no
    IPV6INIT=yes
    IPV6_AUTOCONF=yes
    IPV6_DEFROUTE=yes
    IPV6_FAILURE_FATAL=no
    IPV6_ADDR_GEN_MODE=stable-privacy
    NAME=ens5f1
    UUID=dbab37df-749f-4cf5-b0a9-c9d7e6632f44
    DEVICE=ens5f1
    ONBOOT=yes
    IPADDR=192.168.8.8
    NETMASK=255.255.255.0
    GATEWAY=192.168.8.1
    

    until 구문
    기초 문법
    until  
    do
      语句
    done
    

    until 문장의 문법 은 while 와 비슷 합 니 다. until 은 조건 식 이 성립 되 지 않 을 때 순환 실행 명령 에 들 어가 고 조건 식 이 성립 될 때 순환 을 종료 합 니 다.until 의 응용 장면 이 비교적 절약 되 어 이해 하면 된다.
    until... 까지 예시
    [root@localhost Test]# cat until.sh
    #!/bin/bash
    a=$1
    until [ ${a} -ge 10 ]
    do
      echo "Current number is:" ${a}
      a=$((a-1))
      if [ $a -lt 0 ]
       then
        break
      fi
    done
    [root@localhost Test]# bash until.sh 5 # 不满足条件时,进入循环体
    Current number is: 5
    Current number is: 4
    Current number is: 3
    Current number is: 2
    Current number is: 1
    Current number is: 0
    [root@localhost Test]# bash until.sh 50 # 满足条件时,则不进入循环体
    [root@localhost Test]#
    

    for 문장
    * 8195 ° for 순환 문 구 는 while 순환 시구 와 유사 하지만 for 순환 문 구 는 주로 유한 한 순환 장면 에 사용 되 고 while 는 무한 순환 장면, 예 를 들 어 데 몬 과 같은 장면 입 니 다.
    기초 문법
    1. 첫 번 째 형식
    for var in list
    do
      语句
    done
    

    이 구조 에서 in list 는 생략 할 수 있 습 니 다.생략 할 때 in "$@"즉 for var in "$@"에 해당 합 니 다.
    2. 두 번 째 형식
    for((ex1;exp2;exp3))
    do
      语句
    done
    

    이런 격식 은 C 류 의 풍격 으로, 여러분 도 비교적 많이 보 실 수 있 습 니 다.
    for 예시
    1. 데이터 인쇄
    [root@localhost Test]# cat for.sh
    #!/bin/bash
    echo "first format for sentense "
    for i in {1..5}
    do
      echo ${i}
    done
    
    echo "second format for sentense"
    for((j=1;j<=5;j++))
    do
     echo ${j}
    done
    [root@localhost Test]# bash for.sh
    first format for sentense
    1
    2
    3
    4
    5
    second format for sentense
    1
    2
    3
    4
    5
    

    2. 파일 이름 인쇄
    [root@localhost Test]# cat printfilename.sh 
    #!/bin/bash
    path=$1
    for filename in $(ls $1)
    do
     echo ${filename}
    done
    [root@localhost Test]# bash printfilename.sh "/root/Test/"
    caseif.sh
    case.sh
    compareNum.sh
    eval.sh
    exec.sh
    for.sh
    if.sh
    para.sh
    ping.sh
    printfilename.sh
    readnet.sh
    shift.sh
    testPID.sh
    testposition.sh
    until.sh
    while.sh
    

    selection 구문
    선택 메뉴 를 만 드 는 데 사 용 됩 니 다.selection 순환 문 구 를 가 진 스 크 립 트 를 실행 할 때 출력 은 숫자 순서 목록 에 따라 목록 옵션 을 표시 하고 프롬프트 (기본 값 은\#?) 를 표시 하 며 사용자 가 선택 할 때 까지 기 다 립 니 다.
    기초 문법
    select var in list
    do
      语句
    done
    

    1. 이 구조 에서 in list 는 생략 할 수 있 습 니 다. 생략 은 in "$@"즉 selectvar in "$@"2 와 같 습 니 다. select 와 for 순환 이 다른 것 은 select 순환 이 실 행 된 후에 메뉴 옵션 이 사용자 의 선택 을 기다 리 고 모든 변수 목록 을 자동 으로 순환 하지 않 습 니 다. 사용자 가 입력 한 것 은 메뉴 항목 앞의 숫자 번호 일 뿐 해당 하 는 번 호 를 입력 할 때마다 순환 을 실행 합 니 다.변수 뒤에 대응 하 는 목록 선택 이 끝 날 때 까지
    select 예제
    1. 디 렉 터 리 파일 선택
    [root@localhost Test]# cat select.sh 
    #!/bin/bash
    select file in $(ls $1)
    do
     echo "Current file is:"${file}
    done
    
    [root@localhost Test]# bash select.sh /root/Test
    1) caseif.sh           7) if.sh         13) shift.sh
    2) case.sh         8) para.sh       14) testPID.sh
    3) compareNum.sh       9) ping.sh       15) testposition.sh
    4) eval.sh        10) printfilename.sh  16) until.sh
    5) exec.sh        11) readnet.sh        17) while.sh
    6) for.sh         12) select.sh
    #? 2
    Current file is:case.sh
    #? 3
    Current file is:compareNum.sh
    #? 19
    Current file is:
    #?
    

    순환 인 터 럽 트 제어
    프로 그래 밍 기초 가 있 는 어린이 신발 은 순환 체 에 어떤 것 이 나타 나 면 우 리 는 순환 체 를 미리 중단 할 수 있다 는 것 을 잘 알 고 있다.Shell 에서 자주 사용 하 는 순환 중단 제 어 는 break, contine, exit, return 이 있 습 니 다.
    break/continue: if, for, while 등 조건 과 순환 문 에 자주 사용 되 며, 프로 세 스 의 방향 을 제어 합 니 다. 모든 문 구 를 종료 하고 현재 스 크 립 트 를 종료 하 는 데 사용 되 며, 이전 프로그램 이나 명령 의 실행 상태 return: exit 와 유사 하지만, return 은 함수 내부 에서 함수 의 실행 상태 값 을 되 돌려 주 는 데 만 적 용 됩 니 다.
    상기 상세 한 설명 은 다음 과 같다.
    명령 하 다.
    해명 하 다.
    break n
    n: 순환 하 는 층수 뛰 기;n 을 생략 하면 전체 순환 에서 벗 어 납 니 다.
    continu n
    n: n 층 으로 물 러 나 계속 순환 하기;n 을 생략 하면 이번 순환 을 건 너 뛰 고 다음 순환 을 계속 합 니 다.
    exit n
    현재 셸 프로 세 스 종료 하기;n: 지난번 프로그램 에서 실 행 된 상태 반환 값, n 을 생략 하면 $를 사용 할 수 있 습 니까?실행 상태 값 가 져 오기
    return n
    함수 의 반환 값 에 사용 되 며 함수 의 실행 이 정확 한 지 판단 할 수 있 습 니 다.
    순환 인 터 럽 트 제어 예시
    1. break 예제
    [root@localhost Test]# cat break.sh
    #!/bin/bash
    
    for(( i=1;i

    2. contine 예제
    [root@localhost Test]# cat continue.sh
    #!/bin/bash
    
    for(( i=1;i

    3. exit 예제
    [root@localhost Test]# cat exit.sh
    
    #!/bin/bash
    for(( i=1;i

    순환 문 총화
  • 1. while 순환 문 구 는 데 몬 을 실행 하고 우리 가 원 하 는 순환 이 지속 적 으로 실행 되 고 종료 되 지 않 는 응용 을 실현 하 는 데 자주 사용 되 며, 다른 순환 은 for 와 정시 작업 crond 로 대체 할 수 있 습 니 다
  • 2. 사용 빈도 에 따라 if 와 for 가 가장 높 고 while
  • 가 그 뒤 를 이 었 다.

    좋은 웹페이지 즐겨찾기