2013-12-19 6 views
34

Ich bin neu mit Unix und ich schreibe ein Shell-Skript.Zuweisung der Ausgabe eines Befehls zu einer Variablen in einem Shell-Skript

Wenn ich diese Zeile auf der Eingabeaufforderung ausführen, druckt er die Gesamtzahl der Anzahl der Prozesse, die übereinstimmt:

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

Beispiel die Ausgabe der oben genannten Zeile 2 in der Eingabeaufforderung.

Ich möchte ein Shell-Skript schreiben, in dem die Ausgabe der obigen Zeile (2) einer Variablen zugewiesen wird, die später für den Vergleich in einer if-Anweisung verwendet wird.

Ich suche etwas wie

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

Aber wenn ich es laufen, heißt es Ausgang nicht während ich 2. Bitte helfen Sie erwarten bin nicht gefunden werden.

+3

Sie Kenntnis von dem Raum zwischen 'output =' und 'ps genommen haben ...'? Versuchen Sie es loszuwerden – iruvar

+0

mögliche Duplikate von [wie eine BASH-Variable gleich der Ausgabe von einem Befehl?] (Http://stackoverflow.com/questions/4651437/how-to-set-a-bash-variable -gleich zu-der-Ausgabe-von-einem-Befehl) – nbro

Antwort

59

Sie ein $ Zeichen wie verwenden kann dann können Sie dies tun:

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

Oder:

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

Beispiel:

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

Ausgang:

first 
second 
third 
8

Versuchen:

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

Wrapping Ihren Befehl in $() sagt der Shell diesen Befehl auszuführen, anstatt zu versuchen, den Befehl selbst auf die Variable mit dem Namen „Ausgang“ zu setzen. (Beachten Sie, dass Sie auch den Befehl `backticks` verwenden könnten.)

Ich kann http://tldp.org/LDP/abs/html/commandsub.html empfehlen, um mehr über die Befehlsersetzung zu erfahren.

Auch, wie 1_CR in einem Kommentar korrekt hervorhebt, verursacht der zusätzliche Abstand zwischen dem Gleichheitszeichen und der Zuweisung, dass es fehlschlägt. Hier ist ein einfaches Beispiel auf meinem Rechner des Verhaltens Sie erleben:

OUTPUT=$(expression) 
5

Wenn Sie sie tun wollen, mit mehrzeiligen/mehr Befehl/s:

[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 
Verwandte Themen