Linux shell編程----利用shell腳本遍歷某個目錄下的所有文件
1 我們都知道shell腳本能夠做很多的事,今天剛好一個隊友要我寫個腳本求某個目錄下所有java文件的行數總和
2 ok,為了方便,我把這個目錄放到了當前的家目錄下,路徑為/home/chenguolin/src
3 我在家目錄下建了一個s.sh的腳本,代碼如下,等等來分析代碼的意思
[plain]
#!/bin/bash
function ergodic(){
for file in ` ls $1 `
do
if [ -d $1"/"$file ]
then
ergodic $1"/"$file
else
wc -L $1"/"$file | cut -d' ' -f1 >> /home/chenguolin/out
fi
done
}
INIT_PATH="/home/chenguolin/src"
ergodic $INIT_PATH
4 分析一下代碼的意思
1 第一行是一個常規的格式,我們要指定這個腳本是由bash來執行
2 第二行是一個腳本的函數
3 第三行是一個for循環,shell裡面把反引號裡面的命令認為是系統命令,那麼代碼的意思就是循環枚舉這個目錄下的文件,$1是指函數的第一個參數
4 第四行跳過,相信大家都懂
5 第五行是一個判斷語句,如果當前文件是一個目錄
6 if的結構then
7 遞歸執行這個函數,傳入當前目錄
8 如果文件不是目錄,那麼我們執行下一行
9 wc -L $1"/"$file 這個命令是求當前這個文件的行數,沒有包括空行
| cut -d' ' -f1 這個命令是管道的應用,通過前面得到的結果我們去重新定義cut的分割符為空格,並且只顯示第一列
>> /home/chenguolin/out 把前面得到的內容重定向到家目錄下的out文件
10 結束for循環
11 括號,呵呵呵
12 初始化要遍歷的目錄的路徑
13 函數調用並傳入這個路徑
5 執行
1 首先我們先給這個文件s.sh一個執行權限,先進入家目錄
cd ~
chmod u+x s.sh
2 執行文件
./s.sh
3 得到out的內容(我們這邊要保證out在執行前是空的內容),可以利用cat來查看
4 我們得到的out內容
5 那麼我們得到了每一個文件的行數,現在你是不是想直接手算了啊?
如果真這麼想那麼你就呵呵呵呵呵了
我們可以利用Python來求出這個文件的總和,我就在家目錄下建立一個p.py的Python文件
下面直接貼代碼了
[python]
#!/bin/python
sum = 0
while True:
try:
str = raw_input()
except:
break
num = int(str)
sum += num
print sum
6 進入到家目錄下直接利用重定向來運行p.py
python p.py < out