2016-11-30 56 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