我有这个代码:
#!/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)
我在用
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)
归档时间: |
|
查看次数: |
328 次 |
最近记录: |