Shell Script - Execute more run c command by for loop

這個例子想要在Linux下執行一支程式,但此程式一次面對一個讀取檔做運算,所以在此就

撰寫一個簡單的shell script來一次處理指定資料夾下的多個讀取檔,如此一來不用一個一個

的指定路徑執行,省得更改路徑及一些參數的指定等等

首先在這邊我列了兩個路徑,一個是read file、一個是shell script目錄,如下:

注意!變數=值,=之間不可有空格!如變數 = 值,一開始寫時一直出錯,才發現問題在這

。因為其他語言不會有這個問題orz

datapath=/home/ben/runBaseSH/rawdata
codepath=/home/ben/runBaseSH

再來我要讀取rawdata,以此取得filename,所以下了個cd command,同時建立等等輸出檔案

放置的目錄,如下:

if [ ! -d "$codepath"/output ]; then
        mkdir output
fi

cd $datapath

還是那句話,該空格的地方需要空格[ ! -d...]

for f in `dir -d *`; do
nohup "$codepath"/cprogram "$datapath"/"$f" $(wc -l < "$datapath/$f") "$codepath"/output/base_"$f" &
done

`dir -d *`此行指令會列出此目錄有哪些file,而在這邊是透過nohup來執行,至於nohup的意義

在此就不多說囉!網路上應該一堆教學! 請注意的是,這個例子的變數與檔案concat時,

變數需特別以雙引號括註。

這段語法$(wc -l < "$datapath/$i")主要是求得file內有多少行資料,一般可以以wc -l filename

求得,但如果加上< standard input,在執行wc -l時不會印出filename,只會印出line numbers。

另外,這段執行cprogram執行檔的指令,其後面指定的參數不用在意,重點在怎麼求得我

們要的資訊,如行數、list filename等等。

最後,小弟只是Linux與shell script初學者,如果方法使用上有改進的地方,敬請不吝指正orz

留言