我有这段代码:
#!/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>
答案 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