我是unix的新手,我正在编写一个shell脚本.
当我在命令提示符下运行此行时,它将打印匹配的进程数的总计数:
ps -ef | awk '/siebsvc –s siebsrvr/ && !/awk/ { a++ } END { print a }'
Run Code Online (Sandbox Code Playgroud)
例如,命令提示符中上面一行的输出为2.
我想写一个shell脚本,其中上面一行(2)的输出被分配给一个变量,稍后将在if语句中用于比较.
我正在寻找类似的东西
output= `ps -ef | awk '/siebsvc –s siebsrvr/ && !/awk/ { a++ } END { print a }'`
echo $output
Run Code Online (Sandbox Code Playgroud)
但是,当我运行它时,它表示无法找到输出,而我期待2.请帮助.
Jed*_*els 14
尝试:
output=$(ps -ef | awk '/siebsvc –s siebsrvr/ && !/awk/ { a++ } END { print a }'); echo $output
Run Code Online (Sandbox Code Playgroud)
包装命令会$( )告诉shell运行该命令,而不是尝试将命令本身设置为名为"output"的变量.(注意你也可以使用反引号`命令`.)
我强烈推荐http://tldp.org/LDP/abs/html/commandsub.html来了解有关命令替换的更多信息.
此外,正如1_CR在注释中正确指出的那样,等号和赋值之间的额外空格导致它失败.这是我的机器上您遇到的行为的一个简单示例:
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
Run Code Online (Sandbox Code Playgroud)
如果你想用multiline/multiple命令执行它,那么你可以这样做:
output=$( bash <<EOF
#multiline/multiple command/s
EOF
)
Run Code Online (Sandbox Code Playgroud)
要么:
output=$(
#multiline/multiple command/s
)
Run Code Online (Sandbox Code Playgroud)
例:
#!/bin/bash
output="$( bash <<EOF
echo first
echo second
echo third
EOF
)"
echo "$output"
Run Code Online (Sandbox Code Playgroud)
输出:
first
second
third
Run Code Online (Sandbox Code Playgroud)
| 归档时间: |
|
| 查看次数: |
129609 次 |
| 最近记录: |