標準Linuxの/usr/local/bin/内にある。
スクリプト
#!/bin/sh if [ -f "$1" ] ; then TEMPO=`grep "TEMPO=" $1|sed -e "s/TEMPO=//"` MELODY=`grep -v "TEMPO=" $1` PLAYDATA="${TEMPO} ${MELODY}" else MELODY=`echo $*| sed -e "s/$0//"` PLAYDATA=${MELODY} fi miconapl -a bz_melody ${PLAYDATA}
スクリプト詳細
一文づつ見てみる。
#!/bin/sh
シェルの指定。shを指定している。
if [ -f "$1" ] ; then
「-f」オプションでこの引数が通常ファイルかどうかを判別している。
第1引数が通常ファイルであれば真となりthen以降の命令文を実行。
第1引数が通常ファイルであれば真となりthen以降の命令文を実行。
TEMPO=`grep "TEMPO=" $1|sed -e "s/TEMPO=//"`
TEMPO='命令文1'
とあり、命令文1での結果をTEMPOという名の変数に代入しろ、という内容だ。
命令文1を見てみる。
命令文1を見てみる。
grep "TEMPO=" $1|sed -e "s/TEMPO=//"
grep "TEMPO=" $1
で、引数の内容から「TEMPO=」を含む行を抽出している。
その結果を
その結果を
sed -e "s/TEMPO=//"
に渡している。
結論から言えば「TEMPO=」を除去しているわけだが、これで抽出された文字列が命令文1の結果となり
結論から言えば「TEMPO=」を除去しているわけだが、これで抽出された文字列が命令文1の結果となり
TEMPO=命令文1の結果
となる。
MELODY=`grep -v "TEMPO=" $1`
TEMPO同様に考えれば
MELODY=`命令文2`
ということで、命令文2の結果をMELODYという変数に代入するという意味だ。
命令文2を見てみると
命令文2を見てみると
grep -v "TEMPO=" $1
とシンプルだ。
grepコマンド?の-vオプションとは「パターンに一致しない行を抽出」という意味だ。
つまり、ここでは先ほどまでの「TEMPOを含む行の抽出」の真逆の「引数から『TEMPO=』を含まない行を抽出」となっている。
これを「MELODYとしろ」という意味だ。
grepコマンド?の-vオプションとは「パターンに一致しない行を抽出」という意味だ。
つまり、ここでは先ほどまでの「TEMPOを含む行の抽出」の真逆の「引数から『TEMPO=』を含まない行を抽出」となっている。
これを「MELODYとしろ」という意味だ。
PLAYDATA="${TEMPO} ${MELODY}"
上記2行の結果をそれぞれ代入したものを「PLAYDATA」という変数に代入している。
else
「引数が通常ファイルではなかったり(たとえばディレクトリ、デバイスなど)引数そのものがなければ実行する」という部分。
MELODY=`echo $*| sed -e "s/$0//"`
今まで通りに
MELODY=`命令文3`
として考える。
命令文3をMELODYに代入しろ、というわけだ。TEMPOはこの場合(引数が妥当でない場合)には設定しないらしい。
命令文3とは
命令文3をMELODYに代入しろ、というわけだ。TEMPOはこの場合(引数が妥当でない場合)には設定しないらしい。
命令文3とは
echo $*| sed -e "s/$0//"
となっている。
echo $*
$*とは「全ての引数を空白で区切り、まとめて1つの変数として値とする」という特殊パラメーター。
sed -e "s/$0//"
$0とは「実行されたシェルスクリプトの実行ファイル名」というパラメーター。実行ファイル名を除去した引数すべてがMELODY変数に代入されている。
PLAYDATA=${MELODY}
PLAYDATA変数に先ほどのMELODYを代入している。
fi
引数が通常ファイルかどうかの条件分岐終了。
miconapl -a bz_melody ${PLAYDATA}
miconaplコマンドにPLAYDATAを引数として渡している。
これでPLAYDATAが正しければブザーが鳴る。
これでPLAYDATAが正しければブザーが鳴る。