Shellでのループ


forサイクル
  • フォーマット
  • for     in   
    do 
          1
          2
    done
  • 変数値がリストにある場合、forループはすべてのコマンドを順次実行し、変数名を使用してリストから値を取得します.
  • コマンドは、有効なshellコマンドおよび文です.変数名は任意の単語です.
  • inリスト使用法は選択可能であり、それを使用しない場合、forループはコマンドラインの位置パラメータを使用する.
  • inリストには、置換($)、文字列、ファイル名を含めることができます.
  • demo1

  • #!/bin/bash
    
    for i in 1 2 3 4 5 
    do 
        echo $i
    done
    
  • demo2
  • #!/bin/bash
    
    for i  in "aaa bbb ccc "#     ,      
    do
            echo $i
    done
    echo "           "#       。    
    for i in aaa bbb ccc
    do
            echo $i
    done
    
  • demo3
  • #!/bin/bash
    for loop in `cat myfile`
    do 
        echo $i
    done
    

    注意:*in後はコマンド反引用符*印刷ファイルの内容は行+スペースで1行
  • demo 4 in後に文がない場合、文はin $@
  • に等しい.
    #!/bin/bash
    #for_noin03.sh
    i=1
    j=1
    k=1
    for param
    do
            echo "param i #${i} j #${j} k #${k} is $param"
            i=$[ $i + 1 ]//       
            j=$(expr $j + 2)//expr            $()    
            k=$((k + 3))//        
    done
    

    whileサイクル
  • フォーマット
  • while    (             ,     )
    do
            1
            2
          ...
    done
    

    注意:whileとdoの間には通常1つのコマンドですが、いくつかのコマンドを置くことができます.複数のコマンド間をセミコロンで区切る!コマンドは通常、テスト条件として使用されます.
    #!/bin/bash
    #while01
    echo "ctrl+d quit"
    while echo -n "please enter you name:"; read Name
    do
            echo "Yeah, you name: $Name";
    done
    
    #!/bin/bash
    #while02
    while read LINE
    do
            echo $LINE
    done < names.txt
    

    注:ファイルから変数を読み込むと、 done untilサイクル
  • フォーマット
  • until   
    do  
          1
          2
    done

    条件は任意の試験条件であり、試験はサイクルの最後に発生するので、サイクルは少なくとも1回実行される.
    #!/bin/sh
    #until_mom     
    Part="/backup"
    Look_Out=`df | grep "$Part" | awk '{printf $5}' | sed 's/%//g' `
    echo $Look_Out;
    until [ "$Look_Out" -gt "90" ]
    do
        echo -e "Filesystem $Part is nearly full " | mail root
        Look_Out=`df | grep "$Part" | awk '{printf $5}' | sed 's/%//g' `
        sleep 3600
    done
    
    #!/bin/bash
    #until_mom     
    
    until [ ! -f a.lock ]
    do
            echo "check a.lock exist"
            sleep 2
    done
    echo "you may start another application safely"
    

    breakとcontinue
  • break[n]--ループを終了する埋め込みループであれば、ループ個数
  • からnを指定してループをスキップすることができます.
  • continue現在のループを飛び出して次のループを続行!!!

  • 注意:continueコマンドはbreakコマンドと似ていますが、重要な違いは少ししかありません.ループから飛び出すことはありません.このループステップから飛び出すだけです.まとめ:breakジャンプcontinueスキップ