shell

ファイル内行の合計を計算する

paste というコマンドを初めて知った。入力を行にまとめて、デリミタを + にする。それを bc に食わせると計算されるという仕組み。paste の入力に標準入力 (-) が使えるのでパイプで用意につなげる。行数が多いときはbashのバッファに注意。$ head /tmp/log…

シェルの getopts

シェルスクリプトで引数を扱うためのお作法。 sample.sh #!/bin/sh while getopts p:b:f opt do case $opt in p) PROJECT="$OPTARG" ;; b) BUILD_NUMBER="$OPTARG" ;; f) FLAG=1 ;; \?) exit 1;; esac done echo PROJECT : $PROJECT echo BUILD_NUMBER : $BU…

Bシェルのテストランナー

シェルでもちゃんとテストを記述したく、シェル版のxUnitにあたるようなものを書いた。ただアサーション、結果集計するだけでなく、JUnitライクな結果xmlを出力できるようにした。おかげでちょっと長いけどこれでHudson上でシェルテスト結果のレポート集計を…

曜日の判断(ツェラーの公式)

シェル内で曜日の判断をしたかったのでZellerの公式を書き下した。参考:wikipedia:ツェラーの公式zeller.sh #!/bin/sh # # Zeller's congruence # test $# -ne 3 && exit 1 year1=`expr $1 / 100` year2=`expr $1 % 100` month=$2 day=$3 t1=`expr \( $mont…

前日の日付を取得

TZ環境変数をうまく使うことでdateコマンドだけで前日・翌日の日付を取れる。裏技チックな(本来の使い方でない)香りがするのでメモ。日本だと通常がJST+9なので、それに±24したもので前後日が取れる。 % env TZ=JST+15 date (1日前の時刻を表示) % env TZ=…

Bシェル test コマンドで使う比較を行う演算子

よく忘れる・・・。 文字列 s1 = s2 - 文字列s1とs2が等しい s1 != s2 - 文字列s1とs2が等しくない -z str - strの文字列長が0 str - strの文字列長が1以上 数値 n1 -gt n2 - n1 > n2 n1 -ge n2 - n1 >= n2 n1 -eq n2 - n1 == n2 n1 -lt n2 - n1 < n2 n1 -le…