Shellscriptでランダムなカラーコード生成

/dev/urandom でランダムなカラーコードを簡単に生成できる!こんなシェルスクリプトで.

# get 4 byte random numbers in base 16
random=`od -An -N4 -tx < /dev/urandom`

# cut out subtext from 1 to 6
color=`echo $random | cut -c 1-6`

odoctal dump の頭文字から名付けられたコマンドで,8進数でバイナリをダンプするコマンド (何言ってるのか僕は分かってない).でも8進数以外の出力にも使える.

cut コマンドは簡単なのでここでは説明を省略することにして, od の使い方を見てみよう.od コマンドに与えてるそれぞれのオプションを簡単に説明しよう.僕はこのページを参考にしました.

ここ以降で od の使い方を説明してるけど,od への入力を与えてる /dev/urandom についても知っておくといいと思う.それについても記事を書いてるから読んでね.

-An

-A で出力の先頭に付加されるファイルオフセット (行番号みたいなもの?) を設定.n は「表示しない」という設定.他のオプションは次の通り.

オプション意味
n非表示
d10進数で表示
o8進数で表示
x16進数で表示
$ od -An -N32 -tx < /dev/urandom
 33b12b5c 9c399d71 042f32a6 33bff2bc
 41f072a2 2611c972 0adf07d2 ef7a4e4f

$ od -Ad -N32 -tx < /dev/urandom
0000000 cc2271ec 8e0f2d66 cc6584fb cd1e346d
0000016 f4893caf d85c5f96 fc30d6e9 642844b1
0000032

$ od -Ao -N32 -tx < /dev/urandom
0000000 74cda3ca c327ddec dc359288 d29bff20
0000020 e7bd6695 19e24a99 a3f5cd23 b89ec0c3
0000040

$ od -Ax -N32 -tx < /dev/urandom
000000 2a83421f 89c4b676 8ba7043d 04efc44b
000010 692063c8 5efbcbd6 ec77bd04 7d45c900
000020

$ od -N32 -tx < /dev/urandom
0000000 b5070e17 5309fdf2 0a2dd925 208f0334
0000020 705856f8 ba807a50 f746eb4d 4ce7aced
0000040

-A オプションを指定しないときの,デフォルトの動作はどうやら -Ao を指定したときの挙動のようですね.

-N4

入力データの先頭を切り出してダンプするときのオプション.-N のあとに入力された数のバイト分だけ,入力の先頭を読み込んでダンプする.今回の入力は /dev/urandom という無限に続く乱数列なので,-N オプションで切らないと出力が終わらない笑.

今回 -N4 を選んだのは,僕はこの乱数をカラーコードに使いたかったら.カラーコードは16進数を6桁 (アルファチャンネルは考えてない) なので,(2⁴)⁶ = (2⁸)³ ,つまり3バイトあれば足りる.実際 $ od -An -N3 -tx < /dev/urandom の出力はこんな感じ.

$ od -An -N3 -tx < /dev/urandom
 00cbe8f0

これの下6桁を切り出せばカラーコードに使えるね.でもシェルスクリプトで「右から6文字」を切り出す簡単なコードが見つからなかったので,-N4 で4バイト出力してもらって,その先頭の6文字を切り出すことにしたのでした.

$ od -An -N4 -tx < /dev/urandom
 2cfa6e6d

-tx

-t は出力のフォーマットを決めるためのオプションで,x は16進数で出力してねという指定.他にも色々あるらしいので試してみましょうか.

オプション意味
a文字名。最上位ビットは無視される
c表示可能文字または \ エスケープ文字
d符号付き 10 進数 1 整数 (integer) のサイズ指定
f浮動小数点 1 整数 (integer) のサイズ指定
o8 進数 1 整数 (integer) のサイズ指定
u符号なし 10 進数 1 整数 (integer) のサイズ指定
x16 進数 1 整数 (integer) のサイズ指定
$ od -An -N4 -ta < /dev/urandom
  rs   G   V   Z

$ od -An -N4 -tc < /dev/urandom
 260 305   ^ 213

$ od -An -N4 -td < /dev/urandom
 -1394728534

$ od -An -N4 -tf < /dev/urandom
         1.450007353e-314

$ od -An -N4 -to < /dev/urandom
 03465511161

$ od -An -N4 -tu < /dev/urandom
 1294518198

$ od -An -N4 -tx < /dev/urandom
 1c26865d

$ od -An -N4 < /dev/urandom
 122521 041371

-t オプションを指定しないときの挙動はどれだ?よく分からん…

od には他にもいくつかオプションがあって複雑だけど,/dev/urandom と組み合わせて遊ぶ分にはこれくらいの知識でいいかな?

Shellscriptでランダムなカラーコード生成” への1件のフィードバック

追加

コメントを残す

Powered by WordPress.com. テーマ: Baskerville 2 by Anders Noren

ページ先頭へ ↑

%d人のブロガーが「いいね」をつけました。