「PlayBeep.sh」の編集履歴(バックアップ)一覧はこちら
「PlayBeep.sh」(2008/01/30 (水) 12:38:50) の最新版変更点
追加された行は緑色になります。
削除された行は赤色になります。
標準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以降の命令文を実行。
TEMPO=`grep "TEMPO=" $1|sed -e "s/TEMPO=//"`
>TEMPO='命令文1'
とあり、命令文1での結果をTEMPOという名の変数に代入しろ、という内容だ。
命令文1を見てみる。
>grep "TEMPO=" $1|sed -e "s/TEMPO=//"
[[grepコマンド]]と引数、パイプ、[[sedコマンド]]で成り立っている。
まずは
>grep "TEMPO=" $1
で、引数の内容から「TEMPO=」を含む行を抽出している。
その結果を
>sed -e "s/TEMPO=//"
に渡している。
結論から言えば「TEMPO=」を除去しているわけだが、これで抽出された文字列が命令文1の結果となり
>TEMPO=命令文1の結果
となる。
MELODY=`grep -v "TEMPO=" $1`
TEMPO同様に考えれば
>MELODY=`命令文2`
ということで、命令文2の結果をMELODYという変数に代入するという意味だ。
命令文2を見てみると
>grep -v "TEMPO=" $1
とシンプルだ。
[[grepコマンド]]の-vオプションとは「パターンに一致しない行を抽出」という意味だ。
つまり、ここでは先ほどまでの「TEMPOを含む行の抽出」の真逆の「引数から『TEMPO=』を含まない行を抽出」となっている。
これを「MELODYとしろ」という意味だ。
PLAYDATA="${TEMPO} ${MELODY}"
上記2行の結果をそれぞれ代入したものを「PLAYDATA」という変数に代入している。
else
「引数が通常ファイルではなかったり(たとえばディレクトリ、デバイスなど)引数そのものがなければ実行する」という部分。
MELODY=`echo $*| sed -e "s/$0//"`
今まで通りに
>MELODY=`命令文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が正しければブザーが鳴る。
----
標準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以降の命令文を実行。
TEMPO=`grep "TEMPO=" $1|sed -e "s/TEMPO=//"`
>TEMPO='命令文1'
とあり、命令文1での結果をTEMPOという名の変数に代入しろ、という内容だ。
命令文1を見てみる。
>grep "TEMPO=" $1|sed -e "s/TEMPO=//"
[[grepコマンド]]と引数、パイプ、[[sedコマンド]]で成り立っている。
まずは
>grep "TEMPO=" $1
で、引数の内容から「TEMPO=」を含む行を抽出している。
その結果を
>sed -e "s/TEMPO=//"
に渡している。
結論から言えば「TEMPO=」を除去しているわけだが、これで抽出された文字列が命令文1の結果となり
>TEMPO=命令文1の結果
となる。
MELODY=`grep -v "TEMPO=" $1`
TEMPO同様に考えれば
>MELODY=`命令文2`
ということで、命令文2の結果をMELODYという変数に代入するという意味だ。
命令文2を見てみると
>grep -v "TEMPO=" $1
とシンプルだ。
[[grepコマンド]]の-vオプションとは「パターンに一致しない行を抽出」という意味だ。
つまり、ここでは先ほどまでの「TEMPOを含む行の抽出」の真逆の「引数から『TEMPO=』を含まない行を抽出」となっている。
これを「MELODYとしろ」という意味だ。
PLAYDATA="${TEMPO} ${MELODY}"
上記2行の結果をそれぞれ代入したものを「PLAYDATA」という変数に代入している。
else
「引数が通常ファイルではなかったり(たとえばディレクトリ、デバイスなど)引数そのものがなければ実行する」という部分。
MELODY=`echo $*| sed -e "s/$0//"`
今まで通りに
>MELODY=`命令文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が正しければブザーが鳴る。
----
表示オプション
横に並べて表示:
変化行の前後のみ表示: