script bash unix sh

bash - script - shell variables



AsignaciĆ³n de la salida de un comando a una variable (3)

Soy nuevo con Unix y estoy escribiendo un script de shell.

Cuando ejecuto esta línea en el símbolo del sistema, se imprime el recuento total de la cantidad de procesos que coinciden:

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

ejemplo, el resultado de la línea anterior es 2 en el símbolo del sistema.

Quiero escribir un script de shell en el que el resultado de la línea (2) anterior se asigne a una variable, que luego se usará para la comparación en una instrucción if.

Estoy buscando algo así como

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

Pero cuando lo ejecuto, dice que no se pudo encontrar la salida mientras que yo esperaba 2. Por favor, ayuda.


Puede usar un signo $ como:

OUTPUT=$(expression)


Si desea hacerlo con comandos / varias líneas múltiples, puede hacer esto:

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

O:

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

Ejemplo:

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

Salida:

first second third


Tratar:

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

Envolver su comando en $( ) le dice al shell que ejecute ese comando, en lugar de intentar establecer el comando a la variable llamada "salida". (Tenga en cuenta que también podría usar ''comando'' backticks).

Recomiendo encarecidamente http://tldp.org/LDP/abs/html/commandsub.html para obtener más información sobre la sustitución de comandos.

Además, como 1_CR señala correctamente en un comentario, el espacio extra entre el signo igual y la asignación está causando que falle. Aquí hay un ejemplo simple en mi máquina del comportamiento que está experimentando:

jed@MBP:~$ foo=$(ps -ef |head -1);echo $foo UID PID PPID C STIME TTY TIME CMD jed@MBP:~$ foo= $(ps -ef |head -1);echo $foo -bash: UID: command not found UID PID PPID C STIME TTY TIME CMD