声明命令时出现shell脚本错误

时间:2017-06-27 16:08:16

标签: linux bash shell sh

以下代码应检查用户的内存,如果大于1000,则打印消息 我一直得到错误第4行:impala:命令未找到

#!/bin/bash

while [ true ] ;do
used= `ps hax -o rss,user | awk '{a[$2]+=$1;}END{for(i in a)print i" 
"int(a[i]/1024+0.5);}' | grep user`

if [[ $used > 1000 ]]; then
echo "user memory is $used"

fi
sleep 5
done

我尝试过使用= ps hax -o rss,user | awk '{a[$2]+=$1;}END{for(i in a)print i" "int(a[i]/1024+0.5);} | grep user'

并使用= 'ps hax -o rss,user | awk '{a[$2]+=$1;}END{for(i in a)print i" "int(a[i]/1024+0.5);}' | grep user' 我需要对此有新的认识。请帮忙。

1 个答案:

答案 0 :(得分:1)

在bash中,如上所述[ here ],在等号周围放置空格会导致错误,所以正确的格式是

variable_name=value;

此外,您可以更改

while [ true ] 

while true

修改

如果used的格式为impala 600,而您最后只对该号码感兴趣,那么您可以

used="${used##* }"
#Do this just after the your first command.

最后做

#use -gt for integer comparisons and > for string comparisons
if ! [ -t $used ] && [ $used -gt 1000 ]
then
  echo "user memory is $used"
fi

注意:虽然解决了脚本中的语法错误,但无法保证程序逻辑正确