Linux--shellプログラミング--ループ構造


while文

  • 形式:
  • while  
    do
         
    done
    
    # or
    
    while  ; do
         
    done
     
  • 実行プロセス:まず条件テストを行い、結果が真であれば循環体(キーワードdoとdoneの間のコマンドテーブル)を実行し、次に条件テストを行う...テスト条件が偽であるまでwhile文の実行は終了しません.
  • #! /bin/bash
    # while.sh
    while [ $1 ]
    do
        if [ -f $1 ];then
            echo -e "
    display:$1" cat $1 else echo "$1 is not a file name." fi shift done
  • このプログラムは、各所定の位置パラメータについて、まず、通常のファイルであるか否かを判断し、もし、その内容を表示し、そうでなければ、ファイルではない情報を表示し、1つの位置パラメータ$1をループ処理するたびに、shift明林の2つを利用して後続の位置パラメータを左に移動する.

  • until文

  • 形式:
  • until  
    do
         
    done
    
    # or
    
    until  ; do
         
    done
     
  • untilはwhile文と比較的類似しており、知識テスト条件は異なり、つまりテスト条件が偽である場合、テスト条件が真である場合にサイクル
  • が終了するまでサイクル内のコマンドテーブルを実行する.
  • #! /bin/bash
    # until.sh
    until [ -z "$2" ]; do
        cp $1 $2
        shift 2
    done
    
    if [ -n "$1" ]; then
        echo "bad parameter!"
    fi
     
  • 2 2 2番目の位置パラメータが空でない場合は、ファイル1をファイル2にコピーし、位置パラメータを2つの位置に左に移動し、2番目の位置パラメータがないまで上記の手順を繰り返し、1番目の位置パラメータをテストし、空でない場合は印刷パラメータが正しくない
  • for文

  • for文には主に2つの使用方法があります.1つは値テーブル方式で、もう1つは算術式方式
  • です.
  • 値表方式:
  • 形式:
  • for   [in  ]
    do
         
    done
    
    # or
    
    for   [in  ]; do  ; done
     
  • #! /bin/bash
    # for.sh
    for day in Monday Wednesday Friday Sunday
    do
        echo $day
    done
     
  • #! /bin/bash
    # for_test.sh
    week={Mon Tue Wed}
    for i in "${week[@]}"; do echo $i; done
     

  • #! /bin/bash
    for   in  
    do
         
    done
    
    
    
    #  
    for file in *.sh; do wc -w $file; done
  • 算術式方式
  • 形式:
  • for ((e1; e2; e3)); do  ; done
    
    
    # or
    
    
    for ((e1; e2; e3)); do
         
    done
     
  • の使い方はc言語のループに似ており、3つの算術式(e 1,e 2,e 3)、記入していない場合はデフォルト1(ここでは1が真、0が偽)

  • break,continue,exit

  • break:ループを終了
  • フォーマット:break[n],nは整数で、いくつかのレイヤループから飛び出すことを示し、デフォルトは1
  • です.
  • #! /bin/bash
    # break.sh
    
    num=$1
    while true; do
        echo -n "$num"
        if ((--num == 0)); then
            break;
        fi
    done
    echo "bye"
     

  • continue:今回のループがcontinueの後ろにある文をスキップし、本層ループの開始に戻り、次のループを行います.
  • フォーマット:continue[n]で、nはcontinueを含む文を含むループから外へ何層かのループを飛び出すことを表し、デフォルトは1
  • である.
  • #! /bin/bash
    # continue.sh
    
    num=$1
    for ((i=0; i
     


  • exitコマンド

  • exitコマンドの機能式は直ちに終了し、終了状態(戻り値)
  • を設定する.
  • フォーマット:exit[n]
  • が明示的にnを与えると、終了状態が最後のコマンドの実行状態
  • となる.

    select文

  • select文は、通常、メニューの設計に用いられ、メニュー項目のセットを表示し、ユーザーの選択を読み取る
  • を含むユーザー入力を受信するプロセス全体を自動的に完了する.
  • 形式:
  • select identifier [in word...]
    do
         
    done
     
  • in wordを省略すると、パラメータidentifierは、位置パラメータを所定の値
  • とする.
  • #! /bin/bash
    # select.sh
    
    PS3="Choice? "
    select choice in query add delete update exit
    do
        case "$choice" in
        query)    echo "Call query routine"; break;;
        add)    echo "Call add routine"; break;;
        delete)    echo "Call delete routine"; break;;
        update)    echo "Call update routine"; break;;
        exit)    echo "Call exit routine"; break;;
        esac
    done
    echo "you input $REPLY; your choice is: $choice"
    echo "bye"
     
  • PS 1:コマンドラインプロンプト、PS 2:コマンド内プロンプト、PS 3:select用;REPLYは環境変数であり、ユーザが入力値をREPLY
  • に付与する.