2014年6月11日 星期三

Script 有感

最近接到的任務大多需要撰寫script
gsensor 測試程式, pack image tool...etc
所以在script上面小有進步
加上臥龍小三書籍的加持, 真覺得script 非常好用

在跟日本同事的合作中, 也注意到了自己粗心的部份, 真是很好的學習

簡單記錄script用到的幾個技巧

1. xargs 
    不常使用但其實很方便的指令, 可以將前次輸出結果做為此次輸入參數
    例如
    cat result.log | awk '{file=$1}END{print file}' | xargs -i cp {} destination
    由於cp需要兩個輸入參數, 所以搭配-i 及{} 將前面的輸出結果一個一個傳給cp指令
    若像是rm 此種指令, 則 xargs rm 及可.

2. awk 
    這指令的好用一時寫不完
    就拿這次實作來說
    awk {print "X="$1 "Y="$2 "Z="$3} /sys/class/input/gsensor/value
    此為將/sys/class/input/gsensor/value 內的三個資料分別以 X=xx Y=xx Z=xx的格式顯示
    亦或
    cat value.log | awk '{sum+=$3}END{print sum}' | cat $sum > result.log
    將value.log內的第三個資料累加(awk 一次讀取一列資料), 並且將結果轉向至 result.log
    我想這並不是最簡潔的寫法, 但目前現階段  我的能力僅只如此

3. find 
    搭配 -prune -o 可過濾掉不需要的資料夾/檔案
    例如 : find dirpath -path './proc/*' -prune -o -print | sort >> /dev/stdout
    過濾掉proc資料夾的內容, 並且排序後輸出結果
    其中   './proc/*' & './proc' 會產生不同的結果
    而'./proc/'  等於未加 -prune時的結果

4. 指令上色
    不是很重要的功能, 只是提高可讀性
    例如 : echo -e '\033[0;31;1m'
               echo ">>>> Pass"
               echo -e '\033[0m'
    則 >>>>Pass 顯示紅色

5. tar
    tar時可過濾掉不需要的資料夾, 運用 --exclude=file 此參數
    但若是資料夾很多時可以這樣處理
    EXCLUDE=""
    FILER=(
    ".git"
    )
    for i in "${FILER[@]}" ; do
        EXCLUDE="$EXCLUDE --exclude=$i"
    done 
    tar -jcvf file.tar.bz2 ${EXCLUDE} file_dir

    但要注意的是, 設定的資料夾名稱不只過濾第一層, 只要含有此資料夾關鍵字, 皆會過濾
    後來改用別的做法
     tar -jcvf file.tar -T file.list file_dir 
     輸入一file list給tar, 讓tar針對裡面的內容打包

6. 執行script的過程中
    可以使用 bash -x xxx.script來debug


與其說是script功能, 不如說是提升了指令的運用性






沒有留言:

張貼留言