2012-01-21 102 views
0

這個腳本是由我的導師寫的,但我不明白。 有人可以請給我解釋一下。瞭解這個unix腳本

#!/bin/bash 
find $1 -size +${2}c -size -${3}c 

這個腳本假設接受三個命令行參數:目錄名稱,以字節爲單位的最小文件大小和字節最大文件大小。所以當它運行時,它會是這樣的:

./script.sh /home/Desktop/file 5000 10000 

然後5000到10000之間的文件大小將被回顯到屏幕。

劑量誰知道另一種方法做同樣的?

回答

0

該腳本按照老師的說法運行。

錯誤"find: Invalid argument +c to -size.因爲您不通知腳本的第二個參數。然後$ {2}沒有價值和腳本試圖執行:

find your_path -size +$c -size -$c 

您可以修改腳本,以check for number or arguments

#!/bin/bash 
EXPECTED_ARGS=3 
E_BADARGS=65 
HLP_ARG="path min_size max_size" 
if [ $# -ne $EXPECTED_ARGS ] 
then 
    echo "Usage: `basename $0` $HLP_ARG" 
    exit $E_BADARGS 
fi  

find $1 -size +${2}c -size -${3}c 
+0

爲什麼'E_BADARGS = 65'而不是'E_USAGE = 64'? –

+0

您可以自由選擇[退出狀態](http://www.cyberciti.biz/faq/bourne-shell-exit-status-examples/)代碼。 – danihp

+0

而不是要求3個參數,通常設置合理的默認值通常會更好:find $ 1 $ {2 + -size + $ {2} c} $ {3 + -size - $ {3} c} –

2
#!/bin/bash 
find $1 -size +${2}c -size -${3}c 
    |___|  |_____|  |_____| 
     |   |    | 
This is the This is  This is the 
first argument the second third argument 
passed while argument 
running the 
    script 

find實用語法是搜索specified path的文件這可以根據所選的options進行識別。

-size n[ckMGTP] 
True if the file's size, rounded up, in 512-byte blocks is n. 
If n is followed by a c, then the primary is true if the 
file's size is n bytes (characters). 

使用+second argument前面意味着我們正在尋找,然後指定數量的文件greater。同樣-表示要顯示的文件應小於指定的大小。

通過將三個參數傳遞給您的腳本,意味着我們將$1作爲要搜索的路徑,您的情況是/home/Desktop/file。第二個參數定義了文件應該大於指定參數5000的條件。最後一個參數是指定文件應該小於指定大小10000

希望這會有所幫助!