2013-12-19 153 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 
相关问题