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

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

375行目: 375行目:
以下の例では、<code>break</code>コマンドに2を指定して実行することにより、2重ループを一気に抜けている。<br>
以下の例では、<code>break</code>コマンドに2を指定して実行することにより、2重ループを一気に抜けている。<br>
同様に、2重ループの先頭(1つ目のwhile文の先頭)に戻る場合は、<code>continue</code>コマンドの引数に2を指定して実行する。<br>
同様に、2重ループの先頭(1つ目のwhile文の先頭)に戻る場合は、<code>continue</code>コマンドの引数に2を指定して実行する。<br>
  <source lang="sh">
  <syntaxhighlight lang="sh">
  while : # 1つ目のループ
  while : # 1つ目のループ
  do
  do
390行目: 390行目:
     done
     done
  done
  done
  </source>
  </syntaxhighlight>
<br><br>
 
== コマンドのグルーピングと繰り返し処理 ==
==== コマンドのグルーピング ====
シェル上でコマンドを実行する時、以下のように、コマンドを括弧()で囲みグルーピングすると、<br>
リダイレクト等が全てのコマンドに対して動くようになる。<br>
(command1; command2; command3)
# 例
(echo 'AAA'; echo 'BBB'; echo 'CCC') > output.txt
<br>
また、以下のように、複数行に分けて記述することもできる。<br>
この場合、各コマンドの末尾にセミコロン;は必要ない。<br>
(
  echo 'AAA'
  echo 'BBB'
  echo 'CCC'
) > output.txt
<br>
グルーピングしたコマンドの出力をパイプ処理で繋ぐこともできる。<br>
(
  echo 'foo'
  echo 'bar'
  echo 'yahoo'
  echo 'foo'
) | sort | uniq
<br>
グルーピングしたコマンドは子シェルで実行されるため、<br>
子シェル内でカレントディレクトリや環境変数等を変更した場合、コマンド終了時に元に戻る。<br>
これは、一時的にカレントディレクトリを変更して、コマンドを実行する場合に便利である。<br>
pwd
/home
 
(cd /etc; pwd)
/etc
pwd
/home
<br>
==== ループ内の出力をリダイレクトする ====
for文やwhile文の内部でechoコマンドを実行した結果は、doneの直後にリダイレクトを記述することで、まとめてファイルに出力できる。<br>
<syntaxhighlight lang="sh">
for x in AAA BBB CCC
do
    echo "$x"
    echo "......"
done > output.txt
# 出力(output.txt)
AAA
......
BBB
......
CCC
......
</syntaxhighlight>
<br>
==== ループ内の出力をパイプで接続する ====
ループ内の出力結果は、パイプ処理|で別のコマンドに繋ぐことができる。<br>
<syntaxhighlight lang="sh">
for x in CCC AAA DDD EEE BBB
do
    echo $x
done | sort
# 出力
AAA
BBB
CCC
DDD
EEE
</syntaxhighlight>
<br><br>
<br><br>


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