現在我們來學習UNIX命令ls的幾個腳本。下面的執行命令ls -l得到的一個長列表樣本
$ ls -l這個列表是一個報告,其中的數據按行和列顯示。每個文件信息顯示在單獨的一行上。文件列表由9個列組成。文件的操作權限出現在第一列,文件的字節數顯示在第五列,文件名顯示在最後一列。在列之間由一個或多個空格來分隔,我們可以將每個列看做是一個字段。
在第一個例子中,我們將這個命令的輸出結果導入一個awk腳本中,該腳本打印出該文件列表中選定的字段。為了完成這項操作,我們將創建一個shell腳本使得能夠將數據輸送到用戶。因此, shell程序的結構是:
#!/bin/bashshell使用$*變量來擴展通過命令行傳遞的所有變量(這裡可以使用$1來傳遞第一個變量,但是傳遞所有的變量將具有更大的靈活性)。這些參數可能是文件名、目錄或ls命令的附加選項。如果沒有指定參數, "$*"將為空並且顯示當前目錄。因此ls命令的輸出可以傳給awk,即使沒有給出文件名也能自動讀取標准的輸入。
我們希望awk腳本能夠打印文件的大小和名字。即打印第五個字段($5)和第九個字段($9)。
ls -l $* | awk '{如果將上面的代碼保存在文件fls中並運行該文件,則可以執行fls文件:
$ chmod +x fls以上程序所做的工作就是讀入一個長列表並將其減少為兩個字段。現在我們來產生報告,增加一些新的功能以產生一些信息,這是ls -l列表所沒有提供的。我們將每個文件的大小相加,得到列表中所有文件的總字節數。我們還能夠跟蹤文件的數量並計算出總數。增加這些功能包括兩部分。首先累計每個輸入行。我們創建變量sum來累加列表中文件的大小,用變量filenum來累加列表中文件的數量。
ls -l $* | awk '{第一個表達式使用賦值操作符+=。它的功能是將第五個字段的值加到變量sum的當前值上。第二個表達式遞增變量filenum的值。該變量作為一個計數器,每次表達式計算一次,計數器加1。