2013-12-19 15 views
34

私はUNIXで新しく、シェルスクリプトを書いています。シェルスクリプト内の変数にコマンドの出力を割り当てる

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 -aコマンドからの出力に等しい) – nbro

答えて

59

あなたが好き$記号を使用することができます:あなたは複数行/複数のコマンド/秒でそれをしたい場合は

OUTPUT=$(expression) 
8

試してみてください。

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

$()であなたのコマンドをラップではなく、「出力」という名前の変数にコマンド自体を設定しようとすると、そのコマンドを実行するためにシェルに指示します。 (バックスティック `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 
関連する問題