使用脚本

时间:2016-09-28 20:59:44

标签: linux bash ubuntu terminal sh

我需要使用bash脚本在终端上显示某些信息。 我需要显示的信息是UID,PID,PPID,STATUS,CMD。 好的,所以我已经那样做了,但我在识别和打印方面遇到了一些问题。 我需要以这种方式显示它:

UID     PID     PPID     STATUS    CMD
root     1       0      Sleeping    /sbin/init

但是用我的代码我得到了这个:

UID     PID     PPID     STATUS    CMD
root     
1       0      (sleeping)    /sbin/init

这实际上是我的代码:

echo "UID   PID  PPID    STATUS             CMD"

for i in /proc/*; do
getent passwd `cat $i/status|grep "^Uid"`| cut -d: -f1|head -1
cat $i/status|grep "^Pid"|awk '{printf "%-9s",$2}'
cat $i/status|grep "^PPid"|awk '{printf "%-9s",$2}'
cat $i/status|grep "^State"|awk '{printf"%-9s",$3}'
cat $i/cmdline|awk '{printf "      %-25s",$1}'
echo '\n'
done

使用此代码我也会收到很多“非目录”错误。 我是新来的,所以我需要大量的帮助:( 注意:我不能使用ps命令

3 个答案:

答案 0 :(得分:2)

命令ps(检查man ps)可以完成所有这些:

$ ps -eo user,pid,ppid,state,cmd  | head -n 10

答案 1 :(得分:1)

唯一的问题是head输出一个完整的行,但是你想要抑制换行符。通过捕获输出并使用printf显示它来实现。

以下内容还清除了无用的catgrep更令人震惊的用法,但可以进一步简化。

echo "UID   PID  PPID    STATUS             CMD"

for i in /proc/*; do
  uid=$(getent passwd $(grep "^Uid" "$i/status") | cut -d: -f1 | head -1)
  printf '%-9s' "$uid"   # May need to adjust the formatting
  awk '/^Pid/ {printf "%-9s",$2}' "$i/status"
  awk '/^PPid/ {printf "%-9s",$2}' "$i/status"
  awk '/^State/ {printf"%-9s",$3}' "$i/status"
  awk '{printf "      %-25s\n",$1}' "$i/cmdline"
done

答案 2 :(得分:0)

如果您想玩shell,请先阅读文档:

然后显示你需要的东西,没有任何混乱:

ps -c -o 'uid pid ppid status ucmd'