2014-02-12 150 views
0

我有一個shell腳本,我正在編寫該命令,通過名稱搜索進程並在該進程超過給定值時返回輸出。在shell腳本中將變量傳遞到awk中

我正在努力尋找命名的過程。該腳本目前看起來像這樣:

#!/bin/bash 

findProcessName=$1 
findCpuMax=$2 
#echo "parameter 1: $findProcessName, parameter2: $findCpuMax" 

tempFile=`mktemp /tmp/processsearch.XXXXXX` 
#echo "tempDir: $tempFile" 

processSnapshot=`ps aux > $tempFile` 

findProcess=`awk -v pname="$findProcessName" '/pname/' $tempFile` 
echo "process line: "$findProcess 

`rm $tempFile` 

當我嘗試將該變量傳遞給awk命令時發生錯誤。我檢查了我的awk版本,它確實支持-v標誌。

如果我替換findProcess變量賦值的'/pname/'部分,該腳本將起作用。

我檢查了我的語法,它看起來不錯。任何人都可以指出我要出錯的地方嗎?

回答

2
  1. processSnapshot總是爲空:ps輸出將會文件

  2. 當您通過圖形作爲變量,使用模式匹配操作:

    findProcess=$(awk -v pname="$findProcessName" '$0 ~ pname' $tempFile) 
    
  3. 只有在需要輸出命令時纔會使用反引號。此

    `rm $tempFile` 
    

    執行rm命令,返回輸出回殼,它的輸出是一個非空,殼試圖執行輸出作爲命令。

    $ `echo foo` 
    bash: foo: command not found 
    $ `echo whoami` 
    jackman 
    

    刪除反引號。

當然,你並不需要臨時文件都:

pgrep -fl $findProcessName 
+0

太棒了!謝謝。此外,感謝您解釋shell腳本出錯的每一部分,而不只是告訴我「使用pgrep」。對於shell腳本,我仍然很綠,所以對每一個解釋都非常有幫助。 –

相關問題