「シェルスクリプトの基礎 - 繰り返し文」の版間の差分

📢 Webサイト閉鎖と移転のお知らせ
このWebサイトは2026年9月に閉鎖いたします。
新しい記事は移転先で追加しております。(旧サイトでは記事を追加しておりません)

編集の要約なし
4行目: 4行目:
<br><br>
<br><br>


== シェルスクリプトの例 ==
== for文 ==
変数iに1から5までの数字を指定して、変数に代入された値をechoで表示させるというサンプルコードを以下に記述する。<br>
変数iに1から5までの数字を指定して、変数に代入された値をechoで表示させるというサンプルコードを以下に記述する。<br>
  <source lang="sh">
  <source lang="sh">
23行目: 23行目:
<br><br>
<br><br>


== リストの指定 ==
== for文におけるリストの指定 ==
リストの指定方法を以下に記載する。<br>
リストの指定方法を以下に記載する。<br>
<br>
<br>
140行目: 140行目:
  done
  done
  </source>
  </source>
<br><br>
== while文 ==
以下のサンプルコードでは、変数iが6より小さい間だけ、変数iに代入された値をechoで表示した後、<br>
exprコマンドを使用して変数iに1を加算する。<br>
<source lang="sh">
#!/bin/bash
i=1
while [ $i -lt 6 ]
do
    echo "$i"
    i=`expr $i + 1`
done
</source>
<br>
# 出力
1 2 3 4 5
<br>
bashのみだが、exprコマンドは遅いので(())を使用した算術式の方が処理が速い。<br>
<source lang="sh">
#!/bin/bash
i=1
while ((i < 6))
do
    echo $i
    i=$(( i + 1 ))
done
</source>
<br><br>
== while文における条件の指定 ==
条件の指定にはtestコマンド(または[]コマンド)を使用する場合が多いが、それ以外も条件として指定することができる。<br>
<br>
===== ファイルから読み込む =====
readコマンドを使用してlist.txtファイルの内容を読み込み、1行ずつ表示させる。<br>
以下のシェルスクリプトを実行すると、list.txtファイルの内容を1行ずつ読み込み、その内容が表示される。<br>
list.txtファイルの内容
abc
def
ghi
<br>
<source lang="sh">
#!/bin/bash
while read line
do
    echo "$line"
done < ./list.txt
</source>
<br>
# 出力
abc
def
ghi
<br>
===== 無限ループ =====
条件にNULLコマンドである:(コロン)を指定すると、無限ループになる。<br>
NULLコマンド:は、何もせずに終了コード0(真)を返すので、条件が常に真となるため、無限ループになる。<br>
無限ループを終了させるには、Ctrlキー + Cキーで強制的に終了させるか、<br>
処理部分でif文またはcase文などの条件分岐で、break、return、exitコマンドを実行する。<br>
<source lang="sh">
while :
do
    # 処理
done
</source>
<br>
以下のシェルスクリプトに、無限ループにcase文(条件分岐)を組み込む。<br>
<br>
"Repeat? (y/n) :"の表示後、yキーを入力すると"Repeat!"と表示して処理が繰り返され、<br>
nキーを入力すると、"Repeat end."と表示して処理を終了させる。<br>
<br>
yキーまたはnキー以外のキーを入力すると、"Push y or n key."と表示して、<br>
yキーまたはnキーのいずれかを入力するように促すメッセージを表示して処理を繰り返す。<br>
<source lang="sh">
#!/bin/bash
while :
do
    read -p "Repat? (y/n) :" key
    case "$key" in
      y) echo "Repeat!";;
      n) echo "Repeat end."
          break ;;
      *) echo "Push y or n key.";;
    esac
done
</source>
<br>
# 出力
Repeat? (y/n) :q  ← yキーまたはnキー以外を入力
Push y or n key.
Repat? (y/n) :y    ← yキーを入力
Repeat!
Repat? (y/n) :n    ← nキーを入力
Repeat end.
<br><br>
<br><br>


__FORCETOC__
__FORCETOC__
[[カテゴリ:シェルスクリプト]]
[[カテゴリ:シェルスクリプト]]