셸 의 for 순환 용법 상세 설명

for 명령:
for i in 의 다양한 용법:
  • for i in “file1” “file2” “file3”
  • for i in /boot/*
  • for i in /etc/*.conf
  • for i in$(seq-w 10)--등 폭 의 01-10
  • for i in {1…10}
  • for i in $( ls )
  • for I in $(< file)
  • for i in"$@"-"모든 위치 매개 변 수 를 for i 로 간략화 할 수 있 습 니 다.
  • 메모:bash 셸 은 C 식 for 순환 을 지원 합 니 다.
    
    #!/bin/bash
    j=$1
    for ((i=1; i<=j; i++))
    do
    touch file$i && echo file $i is ok
    done
  • $@:모든 위치 변수의 내용
  • $\#:위치 변수의 개수
  • $0:파일 이름
  • $*:모든 위치 변수의 내용
  • 스 크 립 트 작성 시 주의해 야 할 사항:
  • 시작 에 어떤 셸 을 사용 할 지 지정 합 니 다.예 를 들 어 bash,ksh,csh 등
  • 스 크 립 트 기능 설명,사용 방법,작성 자,버 전,날짜 등
  • 변수 명,함수 명 은 실제 적 인 의미 가 있어 야 하고 함수 명 은 동사 형식 으로 두 번 째 단어의 이니셜 은 대문자 로 써 야 한다.예 를 들 어 updateConfig()
  • 들 여 쓰기 통일 은 4 개의 빈 칸 을 사용 하고 TAB
  • 을 사용 하지 않 습 니 다.
  • 변수 값 을 얻 으 려 면 괄호 를 사용 하 십시오.예 를 들 어${varname}
  • 파일 을 삭제 할 때 경로 에 변수 가 있 으 면 rm-f${abc}/*변수 abc 에 값 이 없 으 면 루트 디 렉 터 리 에 있 는 파일 을
  • 으로 삭제 합 니 다.
  • 스 크 립 트 에서 cd 변환 디 렉 터 리 를 사용 하지 마 십시오
  • 함수 에 도 기능 설명 이 있어 야 하 며 법 에 따라 버 전,날짜 등
  • 을 사용 해 야 한다.
  • 함수 의 기능 은 단일 해 야 하 며,너무 복잡 해 서 는 안 된다.
  • $()는`보다 더 좋다
  • 은 가능 한 한 다 층 if 문 구 를 사용 하지 말고 케이스 문 구 를
  • 으로 대체 해 야 한다.
  • 확정 횟수 의 순환 이 필요 하 다 면 while 문 구 를 for 문 으로 대체 해 야 합 니 다
  • 입력 한 매개 변 수 는 정확성 판단
  • 이 있어 야 한다.
  • 에 주석 을 달 아 자신 이나 다른 사람 이 읽 기 에 편리 하 다.
  • 연습 1:스 크 립 트 를 작성 하여 모든 arp 캐 시 기록 을 비우 기:
    
    #!/bin/bash
    for i in $(arp | tail -n +2|tr -s ' ' |cut -d' ' -f1)
    do
      arp -d $i
    done
    연습 2:10 개의 난수 생 성:
    방법 1:
    
    for i in {0..9};do echo $RANDOM;done
    방법 2:
    
    for i in $(seq 10);do echo $RANDOM;done
    연습 3:마지막 5 초:
    
    #!/bin/bash
    echo "    5 :"
    for i in $(seq 5 -1 1)
    do
      echo -en "$i";sleep 1
    done
    echo -e "  "
    방법 2:
    
    #!/bin/bash
    echo "    5 :"
    for i in $(seq 5 -1 1)
    do
      echo -en "\b$i";sleep 1
    done
    echo -e "\b  "
    연습 4:사용자 일괄 추가:
    
    #!/bin/bash
    for i in $(cat /root/users.txt)    --》          
    do
      useradd $i
      echo "123456" | passwd --stdin $i --》          
    done
    연습:
    uid 가 10000 이상 인 사용 자 를 찾 아 삭제 하려 면 for 순환 을 사용 해 야 합 니 다.
    
    #/bin/bash
    u_uid=(`cat /etc/passwd | awk -F: '{print $3}'`)
    u_name=(`cat /etc/passwd | awk -F: '{print $1}'`)
    for i in `seq ${#u_uid[@] }`
    do
      if (( ${u_uid[i-1]} > 10000 ))
      then
          userdel -r ${u_name[i-1]}&&echo "${u_name[i-1]} delete ok"
      fi
    done
    방법 2:정규 로 10000 이상 의 사용 자 를 찾 습 니 다.
    
    cat /etc/passwd | egrep “1[0-9]{4} | [2-9]{5,}”
    예:IP 주소 에 따라 네트워크 에 존재 하 는 호스트 IP 를 검사 합 니 다.

    break 문장:(순환 점프)
  • for,while,until 등 순환 문 에서 현재 있 는 순환 체 를 뛰 어 넘 고 순환 체 를 실행 한 후의 문 구 는
  • 이다.
    continue 문장:(이번 순환 에서 벗 어 나 기)
  • 은 for,while,until 등 순환 문 에서 순환 체 내 에 남 은 문 구 를 뛰 어 내 려 다음 순환 을 수행 할 수 있 도록 조건 을 재 판단 하 는 데 사용 된다.
  • 연습:for 순환 을 사용 하여 대량 추가 사용 자 를 실현 합 니 다.
    
    #!/bin/bash
    for i in $(cat /root/users.txt) --》          
    do  
      useradd $i
      echo “123456”| passwd $i --stdin  --》        UNAME
    done
    (ps:사용자 존재 여부 판단:id 명령)
    위치 변수
  • 위치 변수:$n,그러나 9 이상 의 위치 매개 변 수 는{}으로 묶 어야 합 니 다.${10}
  • 위치 변수의 역할:사실은 스 크 립 트 에 파 라 메 터 를 전달 하 는 것 입 니 다
  • $0-'는 스 크 립 트 자신의 이름
  • 을 대표 합 니 다.
    (위치 변수의 가장 상용 용법:bash 1.sh 변수 1 변수 2...)
    미리 정 의 된 변수:
  • $\#:명령 행 의 위치 변수의 개수
  • $*:모든 위치 변수의 내용(적 게 사용)
  • $@:모든 위치 변수의 내용
  • $0:현재 실행 중인 프로 세 스/프로그램 이름
  • :현재 셸 의 PID 값,echo
  • :현재 셸 의 PID 값,echo
  • ; ps$$,임시 변수 로 자주 사용 되 는 접미사
  • $?:이전 명령 이 실 행 된 후 돌아 오 는 상 태 는 상태 값 이 0 일 때 실행 이 정상 임 을 나타 내 고 0 이 아 닌 값 은 실행 이상 또는 오류
  • 을 나타 낸다.
  • $RANDOM:난수,임시 파일 이름 으로 사용 가능
  • 예:출력 0-9 이내 난수 C echo$(RANDOM%10)
    출력 1-10 이내 의 난수 C>echo$(RANDOM%10+1)
  • !$:이전 명령 을 대표 하 는 인자
  • !!:이전 명령
  • 을 실행 합 니 다.
    연습:출력
    $1 is aa,
    $2 is bb,
    $3 is cc,
    $4 is dd,
    $5 is ee
    답:
    
    #!/bin/bash
    echo "there are $# arguments in this scripts"
    N=1 --》  N     
    for i in $@
    do
      echo "\$$N is $i"
      ((N++))
    done
    PS:
    ping 명령
  • -c 1-핑 한 번.
  • -i 0.2C'첫 번 째 가방 과 두 번 째 가방 사이 의 간격 0.2s
  • -w 2--'2s
  • 만 기다린다.
    예:
    ping 172.30.132.123 &>/dev/null
    ping 명령 에 사용 되 지 않 습 니 다.$를 실 행 했 습 니까?0 으로 돌아 가기,성공 하지 못 하면 1 로 돌아 가기
    IP 주소 에 따라 네트워크 에 존재 하 는 호스트 IP 를 검사 합 니 다.
    
    #!/bin/bash
    for r in 192.168.1.{1..254}
    do
      ping -c1 -w1 "${ip}" &>/dev/null
    done
    arp -n|grep ether|tr -s ' '|cut -d' ' -f1
    ping 명령 에 대한 가장 전형 적 인 스 크 립 트:
    
    for i in {1..193}
    do
      ( ping -c1 -i0.2 -w1 172.16.30.$i &>/dev/null
      if (( $?==0 ))
      then
          echo "172.16.30.$i up"  >>2.txt
      else
          echo "172.16.30.$i down"  >>3.txt
      fi )&  --》               ,       。
    done
    sleep 2
    live_pc_num=`cat 2.txt|wc -l`
    down_pc_num=`cat 3.txt|wc -l`
    echo "there are $down_pc_num is down"
    echo "there are $live_pc_num is up"
    echo "list:"
    cat 2.txt
    rm -rf 2.txt 3.txt
    break 문
    전형 적 인 while 순환:
    
    #!/bin/bash
    i=1
    while :  --》:   true
    do
        echo "$i"
        ((i++))
        sleep 0.3
    done
     :      ,       
    break 를 더 하면 순환 을 뛰 어 넘 을 수 있 습 니 다:
    
    #!/bin/bash
    i=1
    while :
    do
        echo "$i"
        (( i++ ))
        if ((  i==20000 )) --》     1-19999
        then
            break
        fi
    done
    작은 매듭
  • break:전체 순환 에서 벗 어 나
  • exit:스 크 립 트 건 너 뛰 기
  • contine:이번 순환 에서 벗 어 나 다음 순환
  • 을 수행 합 니 다.
    사례 연습 9:
    사용 자 를 대량으로 추가 하고 다음 과 같은 요 구 를 만족 시 킵 니 다.

    답:
    
    #!/bin/bash
    read -p "         :" a 
    read -p "        :" num
    if (( $num<=10 ))
    then
        n=0
        for i in `seq $num`
        do
            if useradd $a$i &>/dev/null
            then
                echo "  $a$i    !"
                (( n++ ))
                echo "123456"|passwd $a$i --stdin &>/dev/null
            fi
        done
        echo "        :$n "
    else
        echo "      10    !"
    fi
     셸 의 for 순환 용법 에 대한 자세 한 설명 은 여기까지 입 니 다.셸 for 순환 에 관 한 더 많은 내용 은 예전 의 글 을 검색 하거나 아래 의 관련 글 을 계속 찾 아 보 세 요.앞으로 많은 응원 부 탁 드 리 겠 습 니 다!

    좋은 웹페이지 즐겨찾기