2011-09-20 60 views
3

我應該製作一個腳本,使用「set」命令打印當前目錄中的所有大小和文件名,按大小排序。使用「set」命令的簡單bash腳本

#!/bin/bash 

touch /tmp/unsorted 

IFS='@' 
export IFS 

ls -l | tr -s " " "@" | sed '1d' > /tmp/tempLS 

while read line 
do 
    ##set probably goes here## 
    echo $5 $9 >> /tmp/unsorted 
done < /tmp/tempLS 

sort -n /tmp/unsorted 
rm -rf /tmp/unsorted 

通過邏輯,這是應該工作的腳本,但它只產生空白行。 經過與同學討論後,我們認爲「set」命令必須先在while循環中執行。問題是我們不能理解「set」命令的作用,以及如何使用它。請幫忙。謝謝。

+0

你對'$ 5'的期望是什麼,你想做什麼? –

+0

$ 5是大小,$ 9是文件名 – alf

+0

請注意,如果文件名有空格,它不會完全包含在'$ 9' –

回答

6
ls -l | while read line; do 
    set - $line 
    echo $5 $9 
done | sort -n 

或者乾脆

ls -l | awk '{print $5, $9}' | sort -n 
+0

謝謝yi_H,但我必須使用「set」命令 – alf

+0

@alf:我知道了。請參閱更新。 –

+0

它的工作原理!都使用'set -'和'set --'。謝謝你的幫助! – alf

2

集操縱shell變量。這使您可以針對特定情況調整當前環境,例如調整當前通配規則。

有時需要在腳本中調整環境,以便稍後在正確設置選項。由於腳本在子shell中運行,因此您調整的選項在腳本之外將不起作用。

This link在各種可用的命令和選項上有大量的信息。

+0

謝謝斯賓塞,當我在谷歌搜索「設置」時,我已閱讀此頁面。但我想不出任何我可以操縱的變量。 – alf

+0

@alf變量列表位於頁面頂部的語法鏈接下。或者您可以在終端中查看bash手冊頁以獲取更完整的列表。 –