真のbashスクリプト

何故か今日もひたすらコーディング。

VIVER 1.0に向けて。なんと言語はRubyですよ。

シェルスクリプト(0.2) → C++(0.3) ときて、Ruby(1.0)。
VIVERはスクリプト言語の方が適している模様。



VIVER 0.2はシェルスクリプトなんですが、これはashスクリプト
http://viver.sourceforge.jp/cgi-bin/repos/rd.cgi?f=030b07e3c80c;file=viver
ashはbashよりできることが少ない。





では、bashスクリプトとはどのようなものか。
↓コレである。
http://www.linux-stats.org/download/hwdetect-0.0.2.tar.bz2



一部抜粋(&ちょい改変):
===================
#!/bin/bash

PCIMAP=/lib/modules/`uname -r`/modules.pcimap
Tab=$'\t'
Newline=$'\n'

IFS="${Newline}"
for z in `cat $PCIMAP`; do
 IFS=" "
 set -- $z

 if [ "$2" = "0xffffffff" -a "$3" = "0xffffffff" ]; then
  id="c${6:4:4}"
 elif [ "$3" = "0xffffffff" ]; then
  id="m${2:6}"
 else
  id="m${2:6}${3:6}"
 fi

 if [ -z "${!id}" ]; then
  declare ${id}="$1"
 else
  declare ${id}="${!id}${Tab}${1}"
 fi
done

set
===================



ちなみにこのスクリプト、これだけで動きます。
インデントを全角に変更しているので注意。
↓インデント半角版(コピペで動く)


===================
#!/bin/bash

PCIMAP=/lib/modules/`uname -r`/modules.pcimap
Tab=$'\t'
Newline=$'\n'

IFS="${Newline}"
for z in `cat $PCIMAP`; do
IFS=" "
set -- $z

if [ "$2" = "0xffffffff" -a "$3" = "0xffffffff" ]; then
id="c${6:4:4}"
elif [ "$3" = "0xffffffff" ]; then
id="m${2:6}"
else
id="m${2:6}${3:6}"
fi

if [ -z "${!id}" ]; then
declare ${id}="$1"
else
declare ${id}="${!id}${Tab}${1}"
fi
done

set
===================