基本功果然很重要…

話說今天聽說一個跑了一陣子的 shell script 出了點問題,於是抽空跑去看了一下。沒想到看到的是這樣的東西 @_@

#!/bin/sh
mon=`date -d “-1 day” “+%m”`

if [ $mon = 01 ]; then
mon=’Jan’;
elif [ $mon = 02 ]; then
mon=’Feb’;
elif [ $mon = 03 ]; then
mon=’Mar’;
elif [ $mon = 04 ]; then
mon=’Apr’;
elif [ $mon = 05 ]; then
mon=’Mar‘;
elif [ $mon = 06 ]; then
mon=’Jun’;
elif [ $mon = 07 ]; then
mon=’Jul’;
elif [ $mon = 08 ]; then
mon=’Aug’;
elif [ $mon = 09 ]; then
mon=’Sep’;
elif [ $mon = 10 ]; then
mon=’Oct’;
elif [ $mon = 11 ]; then
mon=’Nov’;
elif [ $mon = 12 ]; then
mon=’Dec’;
else exit;
fi

yesdate=`date -d “-1 day” “+%d/$mon/%Y”`

後面就是拿 $yesdate 繼續去跑 script 需要做的事情。當然,任何人都看的出來,問題就出在上面紅字的月份上面,把 May 打錯打成 Mar 了。

苦笑了一下,我把上面這一大段 script 改成:

yesdate=`date -d yesterday “+%d/%b/%Y”`

一行就好了。

本來的 script 難道不能 work 嗎?不是的,當然可以跑。只要把打錯字的地方修一下就好了。但是本來的作法又繁瑣又容易出錯。binutils date 本身就提供的功能何必算的這麼辛苦?

基本功,果然很重要。不管是哪個版本的 Unix,不熟 binutils 是很容易出包、或多走冤枉路的。

[Note] 這邊的 date 參數是給 GNU 版本的 date 吃,和 BSD family 的 date 不一樣。

留言