2010-10-13 59 views
1

我是UNIX新手,無法弄清楚如何從文件中訪問某個數字。以下是我輸入配額-v時得到的結果。 alt text如何在UNIX中讀取值

我需要編寫一個腳本來檢查並確認我是否在配額下,如果不顯示警告消息。所以,我想從該文件中訪問「使用」數字和「限制」數字,並使用'if'語句來進行比較。有人可以告訴我如何訪問該特定位置的數據。 (例如:「使用」區域中的205539和該文件中「限制」區域中的200000)。任何幫助將不勝感激。

回答

2
var=$(quote -v | awk '$2>$4{ print "5"}') 
echo "$var" 
+0

謝謝,該代碼完美的作品。我想知道,如果條件($ 2> $ 4)是真的,我想使變量x = 5。我怎樣才能做到這一點?它與quote -v |類似嗎? awk'$ 2> $ 4 {print「warning」,x = 5}' – HelloWorld 2010-10-13 09:23:40

+1

我不確定你想要用變量x做什麼。所以我猜你想要返回到shell。因此,將整個命令分配給一個變量。請參閱編輯 – ghostdog74 2010-10-13 09:43:05

+0

當我使用您在家中提供的代碼時,它可以在我的ubuntu機器上正常工作。但是當我在香蕉學校運行時,它給了我以下錯誤。 emfile:第21行語法錯誤:'var = $'unexpected。你能否告訴我是否有其他寫作方法。所以我可以通過var – 2010-10-14 01:56:33

0

利用awk獲取這些特定列的字段。一個簡單的shell腳本應該能夠幫助你的條件。

2

我建議你使用配額-q相反,如果你的系統上:

-q, --quiet 
      Print a more terse message, containing only information on 
      filesystems where usage is over quota. 

...然後你可以grep的文件系統,您有興趣

這樣的:

quota -q | grep undergrad4 

應該很容易從腳本檢查grep的返回狀態(0 =發現匹配線,1 =沒有匹配的線)

+0

非常感謝您的詳細解釋。但配額-q在我的系統中不可用。 – HelloWorld 2010-10-13 09:25:21

3

在UNIX shell中,通常使用執行非常小任務的小工具,並將它們組合起來組裝安裝程序。基本系統爲您提供各種工具,可以對文本進行各種基本操作。 例如,你可以這樣運行了配額:

quota | grep undergrad1 

這將運行配額,並將其輸出傳遞到grep的,他們的工作是返回行,如果它們包含它的參數。這將只返回undergrad1行。 然後,您可以將該行添加到可將其分解爲列的工具。這樣做的主要工具被稱爲cut。 Cut採用分隔符和字段說明 - 或者字符計數。 在你的情況下,你可能需要先清理grep的輸出,然後再傳遞給它,以便不依賴於字符數。如果配額使用標籤來分隔列,那麼你可以喂,要削減的是:

quota | grep undergrad1 | cut -d "\t" -f 3 

...但如果它使用可變數量的空格,則可能需要首先將其摺疊成一個與TR及其-s選項:

quota | grep undergrad1 | tr -s " " | cut -d " " -f 3 

請注意,我們現在問切使用空間,而不是標籤,作爲分隔符。

有了這個,你應該可以組裝一個你想要的腳本。進一步說,如果您希望在名稱相同但順序不同的系統上運行,或者在任何符合範圍的情況下運行,則可以在第一行grep「Filesystem」並嘗試在返回它們之前找出列索引。你的腳本。

+0

感謝您的詳細解釋。這是非常有幫助 – HelloWorld 2010-10-13 09:20:53