我剛纔看到的,如果作爲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;做...' –