ぶろぐ

日記です

bashイディオム、ワンライナーループと設定ファイル読み込み


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はもっとまだまだバリバリ便利に使えそうなのでもっと勉強したいところ…。