순환 for, while, until

셸 의 순환 문 구 는 일반적으로 다음 과 같다.
for   while   until
하나
    for 변수 이름 in 목록;do
        순환 체
    done
    
    우선 in 후 list 목록 의 첫 번 째 상수 나 문자열 을 순환 변수 에 할당 합 니 다.
    그리고 순환 체 실행 하기;목록 의 필드 를 순서대로 할당 하고 done 명령 을 실행 한 후 명령 시퀀스 입 니 다.
    list 목록 생 성 방법: 
        (1) 목록 바로 보 여주 기   1 2 3
        (2) 정수 목록:
            (a) {start..end}     {1..10}
            (b) $(seq [start [step]] end)    `seq 1 10`
        (3) 목록 의 명령 을 되 돌려 줍 니 다 $(COMMAND) 
        (4) glob 사용, 예: *. sh
        (5) 변수 참조; $@, $*
정수 n 의 값 을 입력 하고 1 + 2 + 3 +... n 의 합 계 를 계산 하 는 것 을 알려 줍 니 다.
read -p "please enter a positive integer:" n
    for i in $(seq 1 $n 2>/dev/null);do
        let s+=i
    done
done
echo "sum=$s"

   특수 용법: 유사 C 언어 for
    for (제어 변수 초기 화, 조건 판단 표현 식, 제어 변수의 수정 표현 식) 
    do
        순환 체
    done 
    두 개의 작은 괄호: C 스타일 변수 작업 실현 ((i++)) 
    얼굴 변경 초기 화 제어: 첫 번 째 순환 시 에 만 실행
    변 수 를 제어 하 는 수정 식: 다음 순환 에 들 어가 기 전에 먼저 실 행 됩 니 다.
1 부터 100 까지 정수 와 for 실현
for((i=1;i<=100;i++));do
    let sum+=i
done
echo $sum

동안
    while CONDITION; do
        순환 체
    done 
        조건 은 진실 이 고 순환 을 실행 합 니 다.
        조건 은 가짜, 순환 종료.
     조건 에 맞지 않 을 때 까지 순환 을 종료 합 니 다.
    CONDITION: 순환 제어 조건;순환 에 들 어가 기 전에 먼저 판단 을 한다.매번 순환 후 다시 판단 하기;
    CONDTION 변수의 값 은 변화 해 야 합 니 다.순환 체 에서 끊임없이 수정 되 어야 한다.순환 종료 조건 만 들 기
1 부터 100 까지 모든 정수 와 while 실현
i=1
while [ $i -le 100 ];do
    let s=s+i
    let i++
done
echo "$s"

  특수 용법:
    while read line; do
        순환 체
    done     파일 의 모든 줄 을 순서대로 읽 고 변수 라인 에 복사 합 니 다.
GECOS 필드 가 비어 있 는 것 을 발견 하면 사용자 이름과 단위 전 화 를 62985600 으로 채 웁 니 다.
이 사용자 의 GECOS 정보 수정 이 성 공 했 음 을 알려 준다.
while read line ;do
    user=`echo $line|cut -d: -f1`
    gc=`echo $line|cut -d: -f5`
    [ -z $gc ]&>/dev/null && usermod -c "$user 62985600" $user && printf "%-12s %s
" $user  "GECOS changed" done 



三、until

    until CONDITION; do

        循环体

    done

        条件为假,执行循环

        条件为真,退出循环

    直到符合条件退出循环


1到100正整数和until实现

i=0
until [ $i -gt 100 ];do
let sum+=i
let i++
done
echo $sum

순환 제어 문:
    일반적으로 판단 문 구 를 결합 하여 사용 하 며, 특정한 상황 을 뛰 어 넘 는 데 사용 된다.
    1)continue #    #몇 층 이 고, 가장 안쪽 은 1 층 이다. 
        제\# 층 의 이번 순환 을 앞 당 겨 끝내 고 바로\# 층 의 다음 라운드 판단 에 들 어 갑 니 다.
    2)break #    끝\# 층 순환, 최 내 층 은 1 층 
        직접 종료\# 층 순환 체,\# 층 후속 순환 은 실행 되 지 않 습 니 다.
작업:
1. 3 초 마다 시스템 에 로그 인 한 사용자 의 정 보 를 얻 습 니 다.사용자 hacker 로그 인 이 발견 되면 로그 인 시간 과 호스트 를 로그/var/log/login. log 에 기록 하고 시스템 을 종료 하 라 고 알려 줍 니 다.
#!/bin/bash
#
echo
until w|cut -d ' ' -f1|grep "hacker" ;do
    let i++
    echo -e "\b\r$i \t `date` \t no hacker"
    sleep 3
done
echo "should logout"|mail -s 'warning' hacker
echo "is here ! ! !"
echo -e "`date` warning! `w|grep "^hacker"`">>/var/log/messages

2. 10 이내 의 숫자 를 무 작위 로 생 성하 고 맞 춤 법 게임 을 실현 하 며 알림 이 크 거나 작 으 면 종료
#!/bin/bash
#
n=$[RANDOM%11]
num=a
until [ $num -eq $n ]&>/dev/null;do
    read -p "please enter a numbe [0-10]:" num
    if [ -z $num ] ;then
        continue 2
    elif [[ ! $num =~ 1?[0-9] ]] ;then
        continue 2
    elif [ $num -gt $n ] ;then
        echo "    your number is bigger"
    elif [ $num -lt $n ] ;then
        echo "    your number is smaller!"
    fi
done
echo you hit the number!  $n

3. 스 크 립 트 를 작성 하여 100 이내 의 모든 정수 합 을 구 합 니 다.
#!/bin/bash
#zjj
i=0
until [ $i -gt 100 ];do
    let sum+=i
    let i++
done
echo $sum

4. 스 크 립 트 를 작성 하고 ping 명령 을 통 해 172.16.250.1 - 254 범위 내의 모든 호스트 의 온라인 상 태 를 탐지 하 며 온라인 호스트 와 오프라인 호스트 가 각각 얼마 인지 통계 합 니 다.
#!/bin/bash
#
i=1
NumUp=0
NumDown=0
echo
until [ $i -gt 254 ];do
    if ping -W1 -c1 10.1.252.$i &>/dev/null ;then
        let NumUp++
        echo -e "
\t\t 10.1.252.$i  is up  $NumUp"     else         let NumDown++         echo -e "\b\r$NumDown down"     fi     let i++ done

5. 스 크 립 트 를 작성 하고 99 곱셈 표를 인쇄 합 니 다.
#!/bin/bash
#
i=1
until [ $i -gt 9 ];do
    j=1
    until [ $j -gt $i ];do
        echo -n -e  "${j}*${i}=$[$i*$j]\t"
        let j++
    done
echo
let i++
done

6. 스 크 립 트 를 작성 합 니 다. 변수 RANDOM 을 이용 하여 10 개의 무 작위 숫자 를 생 성하 고 10 개의 숫자 를 출력 하 며 최대 자 와 최소 자 를 표시 합 니 다.
#!/bin/bash
#zjj
i=1
ran=$RANDOM
max=$ran
min=$ran
echo $ran
until [ $i -gt 9 ];do
    ran=$RANDOM
    echo $ran
    if [ $ran -gt $max ];then
        max=$ran
    elif [ $ran -lt $min ];then
        min=$ran
    fi
    let i++
done
echo MAX=$max   MIN=$min

7. 스 크 립 트 를 작성 하여 체스 판 인쇄 실현
#!/bin/bash
#
i=1
row=1
until [ $row -gt 8 ] ;do
column=1
    until [ $column -gt 8 ] ;do
        i=$[$i%2]
        if [ $i -eq 1 ];then
            echo -ne "\033[47m  \033[0m"
        else
            echo -ne "\033[41m  \033[0m"
        fi
        let i++
        let column++
    done
echo
    let row++
    let i++
done

8. 등허리 삼각형 (마름모꼴) 인쇄
#!/bin/bash
#
read -p "enter the number of line:" line
for((i=1;i<=$line;i++))
do
    count=$[2*$i-1]
    sapce=$[$line-$i+1]
    printf "%${sapce}c" ' '
    for((j=1;j<=$count;j++));do
        echo -n "*" 
    done
echo
done
for((i=$[line-1];i>=1;i--))
do
    count=$[2*$i-1]
    sapce=$[$line-$i+1]
    printf "%${sapce}c" ' '
    for((j=1;j<=$count;j++));do
        echo -n "*" 
    done
echo
done

9. centos 6.7 을 설치 하고 centos 6.8 kernel 로 업그레이드 합 니 다.

좋은 웹페이지 즐겨찾기