題目:監控記憶體剩餘空間,小於10M則發出信號,給出錯誤代碼,要求調試,如下: #!/bin/bash #mem monitor mem_size=$(free | awk ‘/mem /{print $4}’) if [$mem_size -le 102400] then echo “warning ...
題目:監控記憶體剩餘空間,小於10M則發出信號,給出錯誤代碼,要求調試,如下:
#!/bin/bash #mem monitor mem_size=$(free | awk ‘/mem /{print $4}’) if [$mem_size -le 102400] then echo “warning: mem insufficient” fi
第一次調試代碼:
#!/bin/bash men_size=$(free | awk '/mem/{print $4}') declare -i num=102400 if [ $men_size -le $num ] then echo "空間不足!!" else echo "一切正常!!" fi
運行結果:
雖然第二行可以出現結果,但第一行很明顯無法讓人忽略,一查“[: -le: 需要一元表達式”,說是
1. 當 if 語句中使用 [ ] 條件修飾符時, $men 變數必須加上引號。
2. 當 if 語句中使用 [[ ]] 條件修飾符時,$men 變數的引號可有可無。
用第一種試試:
#!/bin/bash men_size=$(free | awk '/mem/{print $4}') declare -i num=102400 if [ "$men_size" -le "$num" ] then echo "空間不足!!" else echo "一切正常!!" fi
結果如下:
再查“[: : 需要整數表達式”,查到了下麵的說法:
"-eq" 對整數進行比較
"==" 對字元串進行比較
這裡類比一下"-le"和"<="不過分吧?這時我猜想if的兩個比較對象加了引號應該是字元串了吧,所以"-le"就報錯,這時候就沒轍了(改了好久,都是這兩個錯誤輪流出現),怎麼改都不對,這時就需要上面一開始提到的第二種方法了,用兩個中括弧!!!
正確代碼如下:
#!/bin/bash men_size=$(free | awk '/mem/{print $4}') declare -i num=102400 if [[ $men_size -le $num ]] then echo "空間不足!!" else echo "一切正常!!" fi
結果如下:
一對中括弧和兩對中括弧的結果不一樣,所以我一開始的結果就是錯的。。。。。