それマグで!

知識はカップより、マグでゆっくり頂きます。 takuya_1stのブログ

習慣に早くから配慮した者は、 おそらく人生の実りも大きい。

bash for ループでインデックス番号を使うやりかた3つまとめ

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にする) - それマグで!

行番号を付けるためだけのコマンド【nl】(順位を表示にもつかえそう) - それマグで!

ファイル名の一括置換コマンド rename - それマグで!