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

col*_*ore 1 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
Run Code Online (Sandbox Code Playgroud)

我试图cat "/proc/$PID/stat" | awk '{print $14 }'在一个指定的KERNEL数组中保存命令的内容,给出一个计数器的位置.

我有这个错误:

mitop.sh: 8: mitop.sh: KERNEL[0]=26: not found
Run Code Online (Sandbox Code Playgroud)

我做错了什么?

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>
Run Code Online (Sandbox Code Playgroud)

Sto*_*ica 6

我在用 sh ./mitop.sh

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

./mitop.sh
Run Code Online (Sandbox Code Playgroud)

或者像这样:

bash ./mitop.sh
Run Code Online (Sandbox Code Playgroud)

最后一个只是为了进行健全性检查.运行shell脚本的推荐方法是./the_script.sh让第一行决定如何执行它.

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

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