bash で for ループをやる方法を新しいのを覚えた
takuya@rena:~/Desktop$ for ((i=0;i<10;i++)) ; do echo $i ; done ; 0 1 2 3 4 5 6 7 8 9
( ( i=0; i<10 ; i++ ) ) と C言語スタイルのfor ループを書くことが出来る!初心者向けかも!
bash の展開を使った方法
こちらは、UNIXコマンドを触り始めた頃からずっと使ってる
takuya@rena:~/Desktop$ for i in {0..9}; do echo $i ; done ; 0 1 2 3 4 5 6 7 8 9
Bashの変数展開を使ってるんだけど、RubyのRangeっぽくて好き。
学校で習ったのはseq だった
takuya@rena:~/Desktop$ for i in `seq 0 9`; do echo $i ; done ; 0 1 2 3 4 5 6 7 8 9
今にして思えば。seq だけで連番生成するから、seq 使うなら、for ループが要らないような気もするんだよね。seq とパイプで済むよね・・
for ループの使いドコロ
for ループの出番が少ない・・・どんな時だろう。私は、とりあえず10回ループさせたい。とか?
たとえば、ファイルに何か処理をしたいとき・・・
for i in /etc/* ; do echo $i ; done
とか、forループで、ファイル名に対して実行するんだ。
でもさ、これってさ、もっと使いやすい方法がいっぱいあるよね。
データ数だけループさせたいなら、色々方法がある。
ファイルを全部あれこれしたいとか、それなら find + exec / find + xargs
find /etc/ -exec echo {} \;
find /etc/ | xargs -I @ echo @;
などで、コマンド実行できる。
for 使うのって、連番使う時ぐらいしかない気がする
でも、行番号つけるとかはnl コマンドがあって
ls /etc | nl | head -n 10 | pbcopy 1 afpovertcp.cfg 2 aliases 3 aliases.db 4 apache2 5 asl 6 asl.conf 7 authorization.deprecated 8 auto_home 9 auto_master 10 autofs.conf
などとなり、、、やっぱりbash スクリプトで for ループの出番が少ない・・・
awk/ruby/perl もあるし。名前変えたいならrename コマンドあるし
複雑な処理とかまとめてやりたいら、ワンライナーやawk 使うし。。。
やっぱりfor ループってあんまり出番がない。。。
参考資料
http://j7lg.tumblr.com/post/7082249067/bash-for
bashで10回ループ(Bashによる指定回ループとファイル名を001にする) - それマグで!