話說今天聽說一個跑了一陣子的 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;
fiyesdate=`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 不一樣。