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