2013-09-26 66 views
0
#!/bin/bash 
    CURRENT=$(df -h/| grep/| awk '{ print $4}') 
    THRESHOLD=75 

    if (("$CURRENT" >= "$THRESHOLD")); then 
     mail -s "CENTOS-6 localhost 10.10.1.238 Disk Space Alert" [email protected] << EOF 
    Your root partition remaining free space is critically low. Used: $CURRENT% 
    EOF 
    fi 

我得到以下錯誤,當我運行腳本,語法錯誤:操作數預期(錯誤標記是「> = 75」)語法錯誤:操作數預期(錯誤標記是「> = 75」)

+0

您的當前值不是數字,所以你不能使用> =操作就可以了(它包含非數字後綴是人類可讀的,正如-h運算符所要求的那樣)。或者在你的情況下,它是第四列的百分比 - 它會有'%'符號(這是我的情況的第五列) – keltar

回答

0

這是因爲CURRENT將包含百分號,所以它不會是比較操作的有效操作數。

您可以刪除的最後一個字符是這樣的:

CURRENT=${CURRENT%?}; 

還要確保df -h/| grep/| awk '{ print $4}'正確返回使用率,在大多數系統上,你必須使用print $5

0

試試看:

CURRENT=$(df -h |awk '{print $4}' |sort -n |tail -n1 |sed 's/%//g') 
THRESHOLD=90 

if [ $THRESHOLD -gt $CURRENT ] 
0

幾件事情:

  • 你不需要grep可言,awk是非常適合做它自己的正則表達式的東西。
  • 如果在df輸出搜索/,你可能會得到行作爲最坐騎有/某處他們。如果您只需要根掛載點,則可以使用<space>/$
  • 檢查4是正確的場數,在我的箱子是5
  • 在任何情況下,該字段的形式爲55%這將不會被認爲是數字的。你可以使用gsub來擺脫它。

考慮到這一點,下面的代碼片段可用於獲取百分比:

df -h | awk '$0 ~/\/$/ { gsub("%","",$5); print $5 }' 

而且,正如順便說一句,我不認爲的粉絲這裏的文檔在shell腳本中,因爲它或者(1)搞砸了我很好的縮進文件; (2)讓我燒一個半小時,而我努力記住各種語法選項,這將允許縮進EOF串:-)

我更喜歡這樣的:

(
    echo Your root partition remaining free space is critically low: Used: ${CURRENT}% 
) | mail -s "CENTOS-6 localhost 10.10.1.238 Disk Space Alert" [email protected] 

特別因爲那意味着我可以在子外殼中放置任意複雜的命令,以便在郵件消息中生成任何我想要的信息(而不僅僅是簡單的文本替換)。


因此,底線,我會看更多的東西一樣:

#!/usr/bin/env bash 

# Config section. 

LIMIT=75 

# Code section. 

CURR=$(df -h | awk '$0 ~/\/$/ { gsub("%","",$5); print $5 }') 
if [[ ${CURR} -ge ${LIMIT} ]] ; then 
    (
     echo "Your root partition remaining free space is critically low: Used: ${CURR}%" 
    ) | mail -s "CENTOS-6 localhost 10.10.1.238 Disk Space Alert" [email protected] 
fi 
相關問題