真の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
===================