« 2008年3月 | トップページ | 2008年11月 »

2008年5月

2008.05.31

コマンドラインで計算

LinuxWorld誌で連載していた「シェルスクリプトトレーニング」をWebで再開しました。第6回目は「コマンドラインで計算するスクリプト」を題材に引数について解説しています。
http://www.techworld.jp/channels/desktop/101735/
(シェルスクリプトトレーニングは同誌で連載していた「シェルの基本テクニック」の続編になります。第1回~第5回は近々?掲載される予定。内容は雑誌と同一です)。

スクリプトの内容は

#!/bin/bash
echo "$*" | bc


プロンプトで「calc 38*75」と入力すると「2850」と表示されます。Googleの検索窓で入れると出てくるアレ。中身はbcコマンドです。


「calc 38*75+50」やら「calc 38*(75+50)」でも可。スペースを入れたい場合は「calc "38 * 75 + 50"」のようにします。

XPやVistaのDOS窓ではどうやるか、というと、setコマンドが手っ取り早いです。

set /a 38*75
でOK。
set /a

とはいえ、「set /a」なんて覚えていられるわけもないので calc.bat を作るとしたらこうなります。

@cmd /c set /a %*

calc.bat作成

setコマンドだけ書くと、setコマンドがバッチファイル実行環境内(=子プロセス)で実行されることになるので「cmd /c」を付けます(説明はしょってます)。さらに、バッチファイル実行中にコマンド名(cmd /c)が表示されないように、「@」を付けています。
実験:cmd /cなしだとどうなるか、/cなしだとどうなるか、@を付けないとどうなるか(単に表示が変わるだけなので気軽な気持ちで試してOKです)

こんな風に使えます。

使用イメージ

うちのWindowsにはperl.exeを仕込んでます、という方は、「perl -e "printf('%d',%*);"」で。Perlを使うなら、ついでに16進数と2進数での表示をつけるもまたよし。

@perl -e "printf('%%d (%%X)(%%b)',%*,%*,%*);"
バッチファイルでは「%」が特別な意味を持つので「%%」と記述します。

|

« 2008年3月 | トップページ | 2008年11月 »