2009年6月20日土曜日

bashにおける戻り値の利用方法

#!/bin/bash
VAR1=`ls`
echo ${VAR1}
echo "\n"
VAR2=$(ls)
echo ${VAR2}

SMTPによるファイル送信をbashで行う

参考ページ
Thunderbirdを起動→メニューの[表示]→メッセージのソースでメールのソースコードも参考にした。

$ sh smtp_attachment.sh test.jpg

#!/bin/bash
FILENAME=$1
ENCODE_RESULT=`base64 ${FILENAME}`

(
sleep 1s
echo "EHLO wakaranai.doshiyomonai.ne.jp"
sleep 1s
echo "MAIL FROM: tasukete@muryoku.ocn.ne.jp"
sleep 1s
echo "RCPT TO: tanomuseikoshite@gmail.com"
sleep 1s
echo "DATA"
sleep 1s
echo "MIME-Version: 1.0"
sleep 1s
echo "From:tasukete@muryoku.ocn.ne.jp"
sleep 1s
echo "To:tanomuseikoshite@gmail.com"
sleep 1s
echo "Subject:TEST bash source code read"
sleep 1s
echo "Content-Type: image/jpeg;"
sleep 1s
echo ' name=\"test.jpg\"'
sleep 1s
echo "Content-Transfer-Encoding: base64"
sleep 1s
echo "Content-Disposition: attachment;"
sleep 1s
echo ' filename=\"test.jpg\"'
sleep 1s
echo "${ENCODE_RESULT}"
sleep 1s
echo "."
sleep 1s
echo "QUIT"
) | telnet wakaranai.doshiyomonai.ne.jp 25

かなり小さいことで気づくまで時間がかかったが「name」と「filename」の前に半角でホワイトスペースを入れないと正常にファイル名が表示されない。
結果:

2009年6月16日火曜日

bashのfunctionについて

関数を用いてコードを読みやすくする。
uncompress_dir() {
case $1 in
*.tar.bz2)
tar lxvf $1 -C $2
;;
*.tar.gz)
tar zvxf $1 -C $2
;;
*.tar)
tar xvf $1 -C $2
;;
*.zip)
unzip $1 -d $2
;;
*)
echo "未対応のファイル形式です"
;;
esac
}

uncompress_dir ${archivename} ${uncompdir}
「function<空白>関数名<空白>{ ・・・ }」にしないとエラーが出る。

2009年6月14日日曜日

bashの複数行のコメントアウト

: << '#COMMENT_OUT'

#コメントアウトしたいソースコード

#COMMENT_OUT

2009年6月13日土曜日

google ajax apiの呼び出し

<script src="http://www.google.com/jsapi"></script>
<script>
google.load("jquery", "1");
google.setOnLoadCallback(function(){
//ソースコードを書く
});
</script>

Protocol Buffersのコンパイル

ubuntu9.04ではレポジトリにProtocol Buffersのコンパイラが入っている
$ sudo apt-get install protobuf-compiler

でインストール
$ protoc --cpp_out=examples/ examples/addressbook.proto

でコンパイル

圧縮ファイルをディレクトリを指定して解凍する

tar lxvf archive_filename -C directory_name
で出来る

2009年6月7日日曜日

bashのfor文について

#!/bin/bash
#ファイル・ディレクトリ名を配列に入れる
ARRAY=$(ls)

# @を入れると配列に入っている要素をすべて処理する
for ELEMENT in ${ARRAY[@]};
do
echo "${ELEMENT}"
done


追記:配列を使うには権限を変更する必要があるようだ。
chmod u+x filename
uは所有者
xは実行