2011年7月21日 星期四

筆記 - Bash Script 倒數計時器

今天我用了bash寫了一個倒數計時器 有一些實做細節,搜尋了很久才找到,在這裡一一列出
1. 取子字串(substring)
# 方法1
str=codeblocks
substr=${str:0:4} # 取從第0個字元算起4個字元(0~3)
echo $substr  # substr = "code"

# 方法2
substr=`expr substr $str 1 4`  # 用expr substr的時候,字串開頭是1不是0,後面的4是長度
echo $substr  # substr = "code"





2. 取得目前時間(以秒數表示,方便做運算)
time=`date +%s`
echo `expr $time + 100` # 可以直接做計算



3. 以迴圈跑過所有的輸入參數(loop through argv)
while [ $# -gt 0 ]; do
   param=$1
   shift # 將所有參數移動一格($1=$2, $2=$3...)
   echo $param
done



4. 在if判斷式中使用正規表示式(regular expression)
PATTERN=[0-9]+\.[0-9]+\.[0-9]+\.[0-9]+

if [[ 1.1.1.1 =~ $PATTERN ]]; then
   echo 1.1.1.1 match
fi

if [[ 1.a.1.1 =~ $PATTERN ]]; then
   echo 1.a.1.1 match
fi

# 最後印出的結果為 1.1.1.1 match



5. 攔截Ctrl+C
# 先宣告一個函式作為handler
function ctrl_c_pressed {
   echo "Ctrl+C Pressed. Program now exits."
   exit 0  # 若這裡不寫exit的話,程式將繼續執行
}
trap 'ctrl_c_pressed' INT  # 把ctrl_c_pressed設為Ctrl+C handler



6. 隱藏/顯示指標(cursor)
tput civis # 隱藏指標
tput cnorm # 顯示指標


7. 取消/復原鍵盤螢幕顯示(disable/enable keyboard echo)
stty -echo # disable keyboard echo
stty echo  # enable keyboard echo


8. 從螢幕讀一個字元,但不會無限等待(read with timeout)
read -n 1 -t 0.1 ch  # -t 0.1 意思是最多等待0.1秒


先暫時寫這樣,有錯請指正

完整程式下載: https://sites.google.com/site/timothylin1/downloads/countdown.bash
2012-12-12 EDIT: 此程式已移到 github

1 則留言:

kuanyui 提到...

我自己做個筆記好了。
在最後一個done後面加上:

AUDIO_PATH="音樂檔案路徑"
mplayer -volume 100 "$AUDIO_PATH"

可當成鬧鐘。



有裝notify-send的話可以再加上
notify-send -i "喜歡的圖檔位置" -t 5000 "Time's up" "時間到啦!"
用螢幕的notify當作時間到的提醒。