2016-11-30 27 views
1

我有这样的代码:保存值给出[]数组未发现

#!/bin/bash 
PIDS=$(ls -la /proc | awk '{print $9}' | grep "^[0-9]*$") 
PIDLIST=$(echo $PIDS | tr "" "\n") 
counter=0 
for PID in $PIDLIST; do 
    KERNEL[$counter]=$(cat "/proc/$PID/stat" | awk '{print $14 }') 
    counter=$((counter + 1)) 
done 

我试图cat "/proc/$PID/stat" | awk '{print $14 }'命令的内容保存在名为核心阵列,由于通过计数器的位置。

我有这样的错误:

mitop.sh: 8: mitop.sh: KERNEL[0]=26: not found 

什么,我做错了什么?

[email protected]:~$ bash --version 
GNU bash, versión 4.2.24(1)-release (i686-pc-linux-gnu) 
Copyright (C) 2011 Free Software Foundation, Inc. 
Licencia GPLv3+: GPL de GNU versión 3 o posterior <http://gnu.org/licenses/gpl.html> 
+0

如果你加上''的循环for'之前申报-a KERNEL'? – eddiem

+0

使用declare - > mitop.sh:6:mitop.sh:declare:找不到,我正在使用版本4.X – colymore

+0

您是否使用'./ mitop.sh'或其他方式运行脚本,例如'sh。/ mitop.sh'?这一点很重要。 – janos

回答

6

I am using sh ./mitop.sh

这就是问题所在。你没有用Bash执行脚本。 您正在执行它与/bin/sh,这是非常不同的。 你需要这样运行:

./mitop.sh 

或者这样:

bash ./mitop.sh 

这最后一个只是为了完整性检查。 运行shell脚本的推荐方法是使用./the_script.sh, 来让第一行决定如何执行。

此外,该脚本可以写更好的,我建议是这样的:

#!/bin/bash 
kernel=() 
for file in /proc/[0-9]*; do 
    read -a fields < "$file"/stat 
    kernel+=("${fields[13]}") 
done