2015-04-08 74 views
1

以我殼腳本來收集CPU利用率:相對比較表達式

cpu=$(mpstat | awk '$12 ~ /[0-9.]+/ { print 100 - $12}'); 
echo "CPU Usage (%): $cpu" 

輸出:CPU Usage (%): 0.44%

該代碼段如下在我的腳本上述兩個語句:

if [ ($cpu >= 50|bc) -ne 0 ]; then 
    /usr/sbin/sendmail "$recipients" <<EOF 
    subject: $subject 
    from: $from 
    `date`: CPU Utilisation above 50% on $IP 
EOF 
echo "Mail alert triggered." 
fi 

這個問題似乎在語句中與語法相關,其中> =比較正在完成。

錯誤:

./trialByCombat.sh: line 148: syntax error near unexpected token `$cpu' 
./trialByCombat.sh: line 148: `if [ ($cpu >= 50|bc) -ne 0 ]; then' 

我對此毫無頭緒。空格,縮進,shell腳本打敗我。

+0

展望在這一點上,我一定是。 「$ cpu> = 50'本身沒有意義,因爲它不在測試構造內。 –

回答

1

由於您使用的BASH您可以使用算術和((...))援引避免bc

if ((cpu >= 50)); then 
    /usr/sbin/sendmail "$recipients" <<EOF 
    subject: $subject 
    from: $from 
    `date`: CPU Utilisation above 50% on $IP 
EOF 
echo "Mail alert triggered." 
fi 
0

更改腳本:

if [ $(bc <<< "$cpu <= 50") -eq 1 ] 
then 
    /usr/sbin/sendmail "$recipients" <<EOF 
    subject: $subject 
    from: $from 
    `date`: CPU Utilisation above 50% on $IP 
EOF 
echo "Mail alert triggered." 
fi 

另一個示例:

AMD$ cat Script.sh 
#!/bin/bash 

cpu=49.9 
if [ $(bc <<< "$cpu <= 50") -eq 1 ] 
then 
    echo "1" 
fi 

cpu=50.0 
if [ $(bc <<< "$cpu <= 50") -eq 1 ] 
then 
    echo "2" 
fi 

cpu=50.1 
if [ $(bc <<< "$cpu <= 50") -eq 1 ] 
then 
    echo "3" 
fi 


AMD$ ./Script.sh 
1 
2