在bash数组中保存值,找不到array []

时间:2016-11-30 20:31:05

标签: arrays bash awk

我有这段代码:

#!/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 }'命令的内容保存在命名的KERNEL数组中,由计数器给出一个位置。

我有这个错误:

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

我做错了什么?

sistemas@DyASO:~$ 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>

1 个答案:

答案 0 :(得分:6)

  

我正在使用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