2015-05-17 55 views
0

我正在運行一個腳本,我正在查找進程使用的內存百分比。我做它作爲在下面的腳本:Bash:變量比較期間的「錯誤標記爲0」

isrun=`pgrep $programname` #get process id 
while [[ "$isrun" -gt "0" ]] #id > 0 indicates process is running 
     do 
      tmp=`top -bn1 | grep $isrun | awk '{print $10}' | cut -d'.' -f1` #parse output of top command 
      if [[ -n "$tmp" ]]; then #tmp should not be blank. 
       memused=$tmp #get memory percent used 
      fi 
      if [[ "$memused" -ge "$memorylimit" ]]; then #check with memory limit 
       overmemory=1 #too much used 
       break 
      fi 
      isrun=`pgrep $programname` #check again and loop. 
    done 

我越來越對在那裏我有memorylimit比較memused行此錯誤:
./start_decompose.sh:52行:[ :36 0:表達式中的語法錯誤(錯誤標記爲「0」)

如何解決此問題?我不明白爲什麼會發生。如果tmp不爲空白,我的變量將被引用,只有在程序正在運行時纔會發生比較(isrun> 0)

我並不總是得到這個錯誤。錯誤發生的時間很短,然後消失,然後再次發生,並以此類推(定期)。

+0

我建議使用'set -x'來啓動它,這樣你就可以看到所有東西的值。 –

回答

4

你的錯誤信息表明,$ isrun值"36 0"-gt運營商不喜歡:

$ isrun="1 2" 
$ [[ "$isrun" -gt "0" ]] && echo A || echo B 
bash: [[: 1 2: syntax error in expression (error token is "2") 
B 

貌似$ PROGRAMNAME的多個實例正在運行。