bashワンライナーループあれこれ
ワンライナーでループを書いて、プロセスを監視するとかそういうのを「パパッ」と書けると色々と捗る
ある範囲でループするとき
for i in $(seq 1 10) ; do dig -t TXT domain-hoge-${i}.com ; done
$(seq 1 10)で1 2 3 4 5 6 7 8 9 10のリストを作れるところに着目。Perlで言うところの、for(1..10)的なことを出来るのを気に入っている。あまりコードを書きたくない面倒くさがり屋としては。
for i in {1..10} ; do dig -t TXT domain-hoge-${i}.com ; done
とか思っていたけど、$(seq 1 10) より{1..10}のほうが渋い!
無限ループするとき
while : ; do i=$((i+1)) ; echo endlessloop:$i ; sleep 1 ; done
bashでインクリメントするときは、
$((i+1))
を使うのがベストプラクティスっぽい。
便利なループあれこれ
結構慣習的に使いそうなやつ。
イディオムとして覚えるだけで戦闘力++な感じ。
設定ファイルなどを読み込んでループするとき
while read line; do echo $line done < hoge.conf
readで標準入力を受け付けて処理するイディオム。よく使う。
コンマ区切りのファイルを処理するとき
while IFS=, read domain uid password ; do echo "domain=${domain} uid=${uid} password${password}" done < account.list
IFSでリストの区切り文字を,に変更し、csvなどコンマ区切りのファイルを読み込み処理できる。これもよく使う。
じつようr(ry
$ for i in {1..10} ; do echo "(/・ω・)/ $i" ; sleep 1 ; done (/・ω・)/ 1 (/・ω・)/ 2 (/・ω・)/ 3 (/・ω・)/ 4 (/・ω・)/ 5 (/・ω・)/ 6 (/・ω・)/ 7 (/・ω・)/ 8 (/・ω・)/ 9 (/・ω・)/ 10
Bashはもっとまだまだバリバリ便利に使えそうなのでもっと勉強したいところ…。