Paepoi » ShellScript Tips » ShellScript Tips | 繰り返し文
ShellScript Tips | 繰り返し文
# 最終更新日 2020.03.16
ISF 区切りの文字列、又は配列をシーケンスと扱ってループします。
continue や break も利用できます。
カレントディレクトリ内のファイルはワイルドカードで取得可能。
ファイル名に IFS が含まれていても問題なく展開される。
引数をすべてループする場合省略表記が使える。
for 文の結果をリダイレクトしたい場合は以下のように。
条件式は if 文と同様 test コマンドを使う。
for
シェルスクリプトの for 文は Python 等と同様に整数を使いません。ISF 区切りの文字列、又は配列をシーケンスと扱ってループします。
continue や break も利用できます。
#!/bin/sh # zsh でも直接 for なら展開できます for bike in YAMAHA HONDA SUZUKI KAWASAKI ; do [[ $bike = HONDA ]] && continue [[ $bike = KAWASAKI ]] && break echo $bike done # C 言語風に整数を使うことも一応できます for (( i=1; i<5; i++ )); do echo $i done # でもブレース展開のほうが理解しやすいと思う for n in {1..5}; do echo $n done # ブレース展開のできないショボいシェルは seq を使う #for nn in `seq 1 5`; do
カレントディレクトリ内のファイルはワイルドカードで取得可能。
ファイル名に IFS が含まれていても問題なく展開される。
#!/bin/sh for filename in *; do echo $filename done # 特定の拡張子のみを選択して使う場合が多い for pyfile in *.py; do echo $pyfile done
引数をすべてループする場合省略表記が使える。
#!/bin/sh #for arg in "$@"; do for arg; do echo $arg done
for 文の結果をリダイレクトしたい場合は以下のように。
#!/bin/sh # /usr/bin の中身を $HOME に出力するサンプル # done の後ろに > で for 文の結果をリダイレクト for name in `ls /usr/bin`; do echo $name done > ~/output.txt
区切り文字の変更(bash)
#!/bin/bash # $IFS は区切り文字を定義する変数 # デフォルトは スペース、タブ、改行(0xff,0x09,0x0a) _IFS=$IFS IFS=, csv=カンマ,区切りの,テキスト for s in $csv; do echo $s done # 元に戻す IFS=$_IFS
区切り文字の定義(zsh)
#!/bin/zsh motor='スズキかっこいいカワサキかっこいいヤマハ' for j in ${(ps.かっこいい.)motor}; do echo $j done
while, until
while は条件が真、until は条件は偽の場合に繰り返す制御文。条件式は if 文と同様 test コマンドを使う。
#!/bin/sh buf1=あ while [[ $buf1 != あああああ ]]; do echo $buf1 buf1+=あ done buf2=い until [[ $buf2 == いいいいい ]]; do echo $buf2 buf2+=い done
無限ループ
#!/bin/sh # while true は while : でいい echo y で終了 while : ; do # bash read -p '> ' res # zsh #read res\?'> ' [[ $res = y ]] && break done
Copyright(C) sasakima-nao All rights reserved 2002 --- 2024.