#!/bin/bash
function init(){
echo $(\
ps -aef | \
awk -v var=$1 -d 'm=/var/{ if ($3 == 1) print $2 }\
END{ if(!m) print 0 }' \
)
}
//Always return 0 instead PID
MyVar=`init nginx`
当这些命令未包含在函数中时,它可以正常工作
纠正(关于此代码必须执行的操作): 这些代码片段是我的启动/重启/停止脚本的草稿 nginx + mysql-server + php-fpm。当脚本收到“start”命令时,函数init()必须决定:服务器是否正在运行?如果init()返回值!= 0,则表示服务器已在运行
P.S。我非常感谢你的答案我希望它们会有用
答案 0 :(得分:2)
您的测试用例不符合规定:
//
作为评论(不是#
)exit 1
添加到脚本的最后一行进行测试。您没有说明您要完成的任务。我的猜测是你想要nginx的PID。为此,您应该使用pgrep nginx
而不是复杂的awk脚本。
由于if(!m) print 0
,它可能会返回0。但我们没有完整的图片。
你必须使用gawk。在BSD上运行时,你的awk脚本相当冗长。由于你没有解释目的是什么,我只能猜你想要PID。
您不需要echo
它是多余的
您可以同时使用反引号``
和$()
将输出输入变量
此脚本将返回第一个参数的PID:
#!/usr/local/bin/bash
function init(){
pgrep $1
}
MyVar=`init $1`
echo Result: $MyVar
此脚本将使用awk对行进行计算。输入filename作为第一个参数:
#!/usr/local/bin/bash
function init(){
cat $1 | awk '{printf("%5d : %s\n", NR,$0)}'
}
MyVar=$(init $1)
echo Result: $MyVar
更改#!
以匹配您的bash位置。
答案 1 :(得分:0)
您的脚本有几个无意义的间接级别,这可以很好地将输出保存到变量:
variable=$( ps -aef | awk '{ /* awk script */ }' )
你不需要shell函数,你绝对不需要重新echo
输出,但你需要修复你的awk脚本。