bash for文 while文 メモ

forループ

シェルスクリプトの一般的なループは,for, in ,do, doneを使う.
単に連続した数値を利用してfor文を使いたければ,seqでリストを生成する.
下記は,1から10まで番号のついたファイルをコンパイルする例.

for k in `seq 10`
do
    ifort -heap-arrays -O3 "foobar${k}.for" -o "xfoobar${k}"
done

ファイル名などのテキストと繋げるときは""でくくるのがよい.

ディレクトリ内の同じ拡張子のファイルにそれぞれ同じ処理をするときは,

# .eps を .png に変換(ImageMagick使用)
for f in *.eps; do convert $f ${f//.eps/.png}; done

のような感じ.

(while) 該当するファイルを検出し,1つずつ処理を行う

findやgrepでパターンマッチしたファイルそれぞれにコピーとか、置換とかしたいとき

find "path" -name "hoge" |while read line; do
    echo $line
    (処理...)
done

ディレクトリの場合は,grepを使う?もっとスマートな方法がありそう.

find "path" -type d |grep "hoge" |while read line; do
    mv $line ${line//org/new} #ディレクトリ名の変更
done

Front page   Edit Diff Attach Copy Rename Reload   New List of pages Search Recent changes   Help   RSS of recent changes
Last-modified: 2018-01-07 (Sun) 07:45:59 (2468d)