2013-12-19 149 views
34

我是新與UNIX和我寫的shell腳本。在shell腳本分配命令給一個變量輸出

當運行在命令提示這條線,它打印相匹配的過程的數量的總計數:

ps -ef | awk '/siebsvc –s siebsrvr/ && !/awk/ { a++ } END { print a }' 

例如,線的輸出是在命令提示2。

欲寫在上面的行(2)的輸出被分配給一個變量外殼腳本,這將在後面在if語句被用於比較。

我在尋找類似

output= `ps -ef | awk '/siebsvc –s siebsrvr/ && !/awk/ { a++ } END { print a }'` 
echo $output 

但是當我運行它,它說的輸出不能被發現,而我期待2.請幫助。

+3

你學過'輸出='和'PS ...'之間的空間的音符?擺脫之後的 – iruvar

+0

可能重複[如何設置BASH變量等於從一個命令的輸出?](http://stackoverflow.com/questions/4651437/how-to-set-a-bash-variable嘗試-EQUal到的輸出從 - 一個命令) – nbro

回答

59

您可以使用像$標誌:

OUTPUT=$(expression) 
8

嘗試:

output=$(ps -ef | awk '/siebsvc –s siebsrvr/ && !/awk/ { a++ } END { print a }'); echo $output 

$()包裝一下你的命令告訴shell運行該命令,而不是試圖命令本身設置爲名爲「輸出」的變量。 (請注意,您也可以使用反引號`command`。)

我強烈推薦http://tldp.org/LDP/abs/html/commandsub.html更多地瞭解命令替換。

而且,1_CR正確的評論所指出的,平等之間的額外空間簽名和分配導致它失敗。這是我遇到的行爲的機器上一個簡單的例子:

[email protected]:~$ foo=$(ps -ef |head -1);echo $foo 
UID PID PPID C STIME TTY TIME CMD 

[email protected]:~$ foo= $(ps -ef |head -1);echo $foo 
-bash: UID: command not found 
UID PID PPID C STIME TTY TIME CMD 
5

如果你想多/多指令/秒做那麼你可以這樣做:

output=$(bash <<EOF 
#multiline/multiple command/s 
EOF 
) 

或者:

output=$(
#multiline/multiple command/s 
) 

例子:

#!/bin/bash 
output="$(bash <<EOF 
echo first 
echo second 
echo third 
EOF 
)" 
echo "$output" 

輸出:

first 
second 
third 
相關問題