超簡単なシェルスクリプト

ちょっとしたコマンドの羅列程度だが…

シェルを書こうと思って調べると断片的なコマンドの書き方がよく出てくる。
しかし、実際に動くスクリプトの例ってそんなに見ない気がする。
なので、僕の書ける超簡単なスクリプトを時々晒してみようと思う。

自分がしたことのメモを簡単にとれるスクリプト

ぱっとウインドウが出てきて、ちょっと一行書いて、たんっとエンターを押せばテキストデータに追記される。
そんなシェル。

#!/bin/sh

hiduke=`date +%F_%T`
bun=`zenity --entry --title="一言メモ" --text="メモを記録します" --width=400`
echo $hiduke $bun >> log.txt


これを実行するとこんなウインドウが出てくる。


そしてテキストを入力してエンターを押すと、実行したディレクトリに "log.txt" というファイルが生成される。
既にファイルがある場合は次のようにテキストが追記されていく。

2010-05-26_02:24:43 ああああああ
2010-05-26_02:24:55 てすとてすとてすと
2010-05-26_02:25:06 鉄塔鉄美鉄塔鉄美

ショートカットキーで動くようにする

まず、スクリプトに実行権をつける。
右クリック→プロパティ→アクセス権→プログラムとして実行できる に、チェックを入れれば良い。


そしてさっきのスクリプト名を "hitokoto_log.sh" としてホームディレクトリに置いたとすると、コマンドで
$ ~/hitokoto_log.sh
とすれば起動できる。
これを、次の記事を参考にショートカットキーを割り当てると手軽にメモをとれて便利になる。
端末やシステムモニタをショートカットキーで一発起動する - Ubuntu memo note

解説

超短いコードだが、あえて説明してみる。

まず、1行目の "#!/bin/sh" は、これがシェルスクリプトであることを示している。
お決まりの文句だ。

そして、コマンドの date は日付などを表示するコマンドだ。
$ date
と打つと
2010年 5月 26日 水曜日 02:35:21 JST
のように表示される。
スクリプトでは "+%F_%T" というオプションが後ろについているが、これが書式を指定している部分だ。
詳しくは、
$ date --help
とコマンドを打つと解説が見られる。


端末に出力される日付の文字列を変数 "hiduke" に代入したい。
そういうときは「`」で囲んでこうする。
hiduke=`date +%F_%T`


そして、今度は "bun" という変数に "zenity" で出した文を代入している。
"zenity" とは、簡単に言えばウインドウを出して何か入力した結果を端末に出力するものだ。
このスクリプトでは "zenity --entry" となっているので、一行の入力ボックスが出てくる。
あとの部分はウインドウの画像と見比べてみれば分かると思う。


最後に "echo" というコマンドが出てくる。
これは普通に使うと端末に文字列を出力する。
例えば、
$ echo $bun
と打つと、さっき代入した文が表示される。
ちなみに、文の変数は "bun" だったが、変数の値を読むときは "$bun" と書く決まりになっている。
ここで、コマンドの後ろの ">> log.txt" が、出力結果を端末ではなく "log.txt" に向けるという意味なので、最終的に "$hiduke $bun" の変数の中身がテキストとして出力される。
ファイルには追記されていくので、スクリプトを実行する度に1行ずつ追記されていく。

おまけ

スクリプトの欠点として、入力ウインドウをキャンセルして閉じたときにも "$hiduke" だけ記録してしまう。
このばあいに何も記録しないようにしたのが次のスクリプト

#!/bin/sh

hiduke=`date +%F_%T`
bun=`zenity --entry --title="一言メモ" --text="メモを記録します" --width=400`
if [ $? -eq 0 ]
then
	echo $hiduke $bun >> log.txt
fi

"$?" が正常終了(OKを押したかどうか)したかどうかを示す変数で、"0" の時が正常。
そのときだけ "echo" するようになっている。

おわりに

おそまつさまでした。