我刚才看到的,如果作为bash进程ID查询
for x in `ps -ef | awk '{ print $2 }'`
do
if [ "$x" != "PID" ];then
----- do something -----
fi
done
我想知道为什么我们需要有如果检查中,什么是它做了检查代码?
我刚才看到的,如果作为bash进程ID查询
for x in `ps -ef | awk '{ print $2 }'`
do
if [ "$x" != "PID" ];then
----- do something -----
fi
done
我想知道为什么我们需要有如果检查中,什么是它做了检查代码?
如果运行ps -ef
你会发现,它会打印标题:
UID PID PPID TTY STIME COMMAND
[...]
检查跳过头。
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
该检查被添加以跳过标题部分。您可以通过修改awk
语句来删除整个if语句以跳过第一行。要找出什么标题运行ps -eaf |head -n 1
。
for x in $(ps -ef | awk 'NR>1{ print $2 }')
do
--------Do something with $x---------
done
附加信息:'ps'的某些实现有一个标记来省略写头 - 请参阅你的手册页。这可以简化脚本,尽管以可移植性为代价。 –
您是否运行了命令,生成'for'循环的输入? –
你可以通过稍微修改'awk'语句到'ps -ef | awk'NR> 1 {print $ 2}''。这将跳过标题。 –
或者,不是使用'-f'来打印丢弃的信息,只需要在$(ps -e -o pid =)中输入x;做...' –