2016-10-05 87 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'的某些實現有一個標記來省略寫頭 - 請參閱你的手冊頁。這可以簡化腳本,儘管以可移植性爲代價。 –