2016-10-05 25 views
1

我刚才看到的,如果作为bash进程ID查询

for x in `ps -ef | awk '{ print $2 }'` 
    do 
     if [ "$x" != "PID" ];then 
     ----- do something ----- 
     fi 
    done 

我想知道为什么我们需要有如果检查中,什么是它做了检查代码?

+0

您是否运行了命令,生成'for'循环的输入? –

+0

你可以通过稍微修改'awk'语句到'ps -ef | awk'NR> 1 {print $ 2}''。这将跳过标题。 –

+0

或者,不是使用'-f'来打印丢弃的信息,只需要在$(ps -e -o pid =)中输入x;做...' –

回答

1

如果运行ps -ef你会发现,它会打印标题:

 UID  PID PPID TTY  STIME COMMAND 
[...] 

检查跳过头。

1

ps -ef | awk '{ print $2 }' outputs'如下;第一行是PID,所以如果使用陈述排除PID行;

[email protected]:/tmp$ ps -ef | awk '{ print $2 }' | head 
PID 
1 
2 
3 
5 
7 
8 
9 
10 

你也可以使用这个没有if;

#!/bin/bash 
for x in `ps -ef | awk '{ print $2 }' | grep -v PID` 
do 
    #----- do something ----- 
    echo $x 
done 
2

该检查被添加以跳过标题部分。您可以通过修改awk语句来删除整个if语句以跳过第一行。要找出什么标题运行ps -eaf |head -n 1

for x in $(ps -ef | awk 'NR>1{ print $2 }') 
    do 
      --------Do something with $x--------- 
    done 
+0

附加信息:'ps'的某些实现有一个标记来省略写头 - 请参阅你的手册页。这可以简化脚本,尽管以可移植性为代价。 –