Shell 문법 - while 조건문

6603 단어
while 循环语句

while 순환 구문 문법 형식:
while < 条件表达式 >
do
        指令
done

스 크 립 트 실행 에 관 한 용법
명령 하 다.
설명 하 다.
sh file.sh &
file. sh 스 크 립 트 를 배경 으로 실행 (배경 에서 스 크 립 트 를 실행 하 는 일반적인 방법)
ctl+c
현재 스 크 립 트 나 작업 실행 중지
ctl+z
현재 스 크 립 트 나 작업 일시 정지
bg
현재 스 크 립 트 나 작업 을 배경 으로 실행 합 니 다.
fg
현재 스 크 립 트 나 작업 을 프론트 에 놓 고 실행 합 니 다.여러 스 크 립 트 라면 번 호 를 추가 해 야 합 니 다. 예 를 들 어 fg 2.
jobs
현재 실행 중인 스 크 립 트 나 작업 보기
kill
실행 중인 스 크 립 트 작업 닫 기
프로 세 스 관리 에 관 한 Linux 명령
명령 하 다.
설명 하 다.
kill、killall、pkill
진행 과정 을 죽이다
ps
프로 세 스 보기
pstree
프로 세 스 상태 트 리 보이 기
top
프로 세 스 보이 기
renice
우선권 을 바꾸다
nohup
사용자 가 시스템 을 종료 한 후 계속 작업 합 니 다.
pgrep
일치 하 는 조건 의 프로 세 스 찾기
strace
프로 세 스 의 시스템 호출 상황 을 추적 합 니 다.
ltrace
프로 세 스 호출 라 이브 러 리 함수 추적
小结

1. while 순환 구조 및 관련 문장 종합 실천
  • while 순환 의 특 기 는 데 몬 을 실행 하고 우리 가 원 하 는 순환 을 지속 적 으로 실행 하고 종료 하지 않 는 응용 을 실현 하 는 것 입 니 다. 주파수 가 1min 이하 인 순환 처리 에 적합 합 니 다. 다른 while 순환 은 거의 for 순환 및 정시 작업 crontab 기능 으로 대체 할 수 있 습 니 다
  • case 문 구 는 if 문 구 를 사용 하여 대체 할 수 있 으 며, 시스템 이 스 크 립 트 를 시작 할 때 소량의 고정 규칙 문자열 을 입력 한 경우, case 문 구 를 많이 사용 하고, 기타 일반 판단 은 if 문 구 를 많이 사용 합 니 다
  • .
  • 한 마디 로 장면 을 바 꾸 면 if 문장, for 문장 이 가장 많이 사용 되 고 그 다음은 while (데 몬), case (서비스 시작 스 크 립 트)
  • 이다.
    2. 셸 스 크 립 트 의 각 문장의 사용 장면
  • 조건 식 은 간단 한 조건 판단 및 출력 (파일 이 존재 하 는 지, 문자열 이 비어 있 는 지 등)
  • 에 사 용 됩 니 다.
  • if 수치 판단 은 서로 다른 수치 가 비교적 적은 경우
  • 에 많이 사용 된다.
  • for 는 정상 적 인 순환 처리 에 가장 많이 사용 된다
  • 사례 1: 숫자 를 맞 혀 100 이내 의 숫자 를 무 작위 로 생 성하 여 사용자 가 숫자 를 입력 하여 맞 히 도록 한다.게임 규칙: 숫자 를 입력 해 야 합 니 다. 잘못 맞 혔 을 때 크기 알림 이 나타 나 야 사용 횟수 를 알려 줍 니 다.
    #!/bin/bash
    total=0
    RETVAL=0
    key=$((RANDOM%100))
    echo "Let's play the guessing game!"
    echo "key:$key"
    panduan(){
            read -p "input num: " num
            expr $num + 1 &>/dev/null
            RETVAL=$?
            if [ $RETVAL -ne 0 ];then
                    echo "number number !!!"
                    panduan
            fi
    }
    
    guess(){
            ((total++))
            if [ $num -lt $key ];then
                    echo "It is too small"
                    panduan
            elif [ $num -gt $key ];then
                    echo "It is too big"
                    panduan
            else
                    echo "Guess right"
                    echo "yi gong cai le $total ci"
                    exit 0
            fi
    }
    main(){
            panduan
            while true
            do
              guess
            done
    }
    main $*

    사례 2: 핸드폰 충전 및 문자 발송.이 사례 는 실제 용도 가 없 기 때문에 종합 적 으로 연습 하고 노 는 다음 과 같은 기능 으로 할 수 있다.
  • 충전 되 었 으 나 중복 충전 금액 이 누적 되 지 않 아 충전 후 바로 잔액 을 조회 하여 정상적으로 사용 할 수 없습니다
  • 문 자 를 보 내 고 보 낸 수량 과 문자 내용 을 입력 하 며 금액 이 부족 할 때 선택 할 수 있 습 니 다 (y: 충전, n: 보 낸 수량 수정, o: 반환 메뉴)
  • 잔액 조회, 발송 기능 선택 (o: 반환 메뉴) 을 사용 할 때 만 조회 가 자주 사용 할 수 있 습 니 다
  • 종료, 현재 스 크 립 트 종료
  • #!/bin/bash
    RETVAL=0
    balance=0
    menu(){
    cat << EOF
     1) Recharge
     2) Send information
     3) Query
     4) exit
    EOF
    read -p " please enter a number: " num
    case $num in
            1)
              echo "Welcome to chongzhi !"
              recharge
              ;;
            2)
              echo "Welcome Check the balance !"
              send
              ;;
            3)
              echo "Welcome to the query interface !"
              selects
              ;;
            4)
              echo "Looking forward to your next arrival !"
              exit
              ;;
            *)
              echo "Tips:{1|2|3|4}"
              menu
    esac
    }
    
    recharge(){
            read -p "please enter to RMB: " rmb
            expr $rmb + 1 &>/dev/null
            RETVAL=$?
            if [ $RETVAL -ne 0 ];then
                    echo "please input num"
                    recharge
            fi
            echo "$rmbs  Rechargs success"
            ((rmbs=$rmb + $balance))
            menu
    }
    
    send(){
            while true
            read -p "send several messages: " strips
            expr $strips + 1 &>/dev/null
            RETVAL=$?
            if [ $RETVAL -ne 0 ];then
                    echo "please input num"
                    send
            fi
            ((count=$strips * 15))
            do
              if [ $count -gt $rmbs ];then
                    echo "Insufficient amount !!!"
                    read -p "Recharge(y|n|o) ?" or
                    if [ $or = y -o $or = Y ];then
                            recharge
    
                    elif [ $or = n -o $or = N ];then
                            send
                    else 
                            menu
                    fi
              else 
                    read -p "Please input information content: " input
                    echo "sending:$input  send success"
                    ((balance=$rmbs - $count))
                    echo "Balance: $balance"
              fi
              ((rmbs=$rmbs - $count))
            done
    }
    
    selects(){
            echo "Query:$balance"
            menu
    }
    
    menu $*

    사례 3: while 데 몬 방식 으로 사 이 트 를 감시 하고 10s 마다 사이트 가 정상 인지 확인 합 니 다.
    #!/bin/bash
    . /etc/init.d/functions
    count=0
    url_list=(
    www.baidu.com
    blog.51cto.com
    www.taobao.com
    www.192.168.80.123.com
    )
    
    waits(){
            echo -n "3s run after"
            for((i=0;i<3;i++))
            do
                    echo -n .
                    sleep 1
            done
            echo 
    }
    
    url(){
            waits
            for((i=0; i/dev/null 2>&1
                    if [ $? -eq 0 ];then
                            action "${url_list[$i]}" /bin/true
                    else
                            action "${url_list[$i]}" /bin/false
                    fi
    
            done
            ((count++))
    }
    
    main(){
            while true
            do
              url
              echo "------count:$count------"
              sleep 10
            done
    }
    main
    while 循环按行读文件

    방법 1:
    cat 文件|while read line
    do
      命令
    done

    방법 2:
    while read line
    do
      命令
    done

    사례 1: 셸 스 크 립 트 를 작성 하여 cat 명령 의 기본 기능 을 실현 합 니 다.
    #!/bin/bath
    while read line
    do
      echo $line
    done

    사례 2: 셸 스 크 립 트 를 작성 하여 짧 은 시간 동안 PV 양 에 따라 대응 하 는 ip 을 차단 하고 DoS 기능 을 해결 합 니 다.
    #!/bin/bash
    count=0
    while true
    do
    netstat -an|grep EST|awk -F '[ :]+' '{print $6}'|sort|uniq -c>ip.log
    exec

    다음으로 전송:https://blog.51cto.com/12384628/2297292

    좋은 웹페이지 즐겨찾기