2012/06/20
コーディングスタイル ネタ編
twitter で話題になったので shell スクリプトにしてみた。
一応 posix 準拠の shell で動作すると思うんだけど、
$((…)) を使ったビット演算は果たして posix 準拠なのか微妙
あくまでもネタという事で笑って見て貰えれば嬉しい。
1#!/bin/sh 2# All rights reserved, copyright (C) 2012, Mitzyuki IMAIZUMI 3# 4 5# 6# 10進数を2進数に変換して表示 7# 8printb() 9{ 10 11 local i str num 12 13 i=0 14 num=${1} 15 16 while [ $i -lt 32 ] 17 do 18 str="$((num & 1))${str}" 19 num=$((num >> 1)) 20 i=$((i + 1)) 21 done 22 23 echo "${str} (${1})" 24 25} 26 27# 28# usage メッセージ表示 29# 30usage() 31{ 32 33 echo "Usage: ${1} [-v][-h|-o] num [... num]" 1>&2 34 35 return 255 36 37} 38 39# 40# ヘッダ表示 41# 42header() 43{ 44 45 local i 46 47 i=0 48 49 while [ ${i} -lt 4 ] 50 do 51 printf " *" 52 i=$((i + 1)) 53 done 54 55 echo 56 57} 58 59# 60# メイン処理 61# 62 63# オプション解析 64if args=`getopt voh $*` 65then 66 set -- ${args} 67 for i 68 do 69 case "${i}" in 70 -v ) 71 verbose=true;; 72 -o ) 73 prefix="0";; 74 -h ) 75 prefix="0x";; 76 -- ) 77 shift 78 break;; 79 esac 80 shift 81 done 82else 83 usage ${0##/} 84 exit 85fi 86 87# ヘッダ出力 88${verbose:-false} && header 89 90# 2進数変換 91for i 92do 93 printb `printf %d ${prefix}${i}` # 変換出力 94doneどうだ、某会長(謎
ちなみに bc (1) を利用すると簡単に実現できちゃいますが、 プログラミング自体を楽しむという事で…
$ echo "ibase=10; obase=2; 10" | bc 1010 $ echo "ibase=16; obase=2; 20" | bc 100000
トラックバック
https://blog.bsdhack.org/index.cgi/Computer/20120620.trackback