为什么我的脚本会得到额外的0

时间:2017-02-22 18:04:47

标签: linux bash shell if-statement grep

我不知道为什么在运行脚本时我得到额外的use Closure, Session, Auth, App; class LocaleMiddleware { public function handle($request, Closure $next){ if(Auth::user() ){ App::setlocale(Auth::user()->lang); }elseif($locale = Session::has('lang')){ $local = Session::get('lang'); App::setlocale($local); } return $next($request); } }

这是我的脚本:我运行SQL查询并将其保存为文件0

这是我的数组:valor.txt

array=(50 60 70)

Valor.txt

代码:

 count | trn_hst_id | trn_msg_host
-------+------------+--------------
    11 |         50 | Aprobada
     2 |         70 | Aprobada
(2 rows)

这是我的输出。

function service_status {
    cd
    cat valor.txt | grep $1 | gawk '{print $1}' FS="|" | sed "s/ //g"
    if [ $? -eq 0 ]; then
        echo -n 0
        else
        echo -n $1
    fi
}

        echo "<prtg>"

# <-- Start
        for i in "${array[@]}"
        do

        echo -n "   <result>
       <channel>$i</channel>
       <value>"
        service_status $i
        echo "</value>
       </result>"
       done
# End -->
       echo "</prtg>"
       exit

为什么我在这里获得<prtg> <result> <channel>50</channel> <value>11 0</value> </result> <result> <channel>60</channel> <value>0</value> </result> <result> <channel>70</channel> <value>2 0</value> </result> </prtg> ? -

0

2 个答案:

答案 0 :(得分:1)

如果我理解你的评论,你想打印计数。这是count列的值(如果valor.txt中存在),如果trn_hst_id中的array不在valor.txt中,则为0。这应该有效(虽然没有经过测试):

function service_status {
    val=$(cat ~/valor.txt | grep $1 | gawk '{print $1}' FS="|" | sed "s/ //g")
        #     ^^ so you don't need to "cd" each time
        # Save the value into "$val"
    echo -n "${val:-0}"     # If there is nothing in $val, print a 0
}

"${val:-0}"序列扩展为"$val",如果$val中有文字,则为0。如果$1valor.txt不在$val:-将为空,那么您将获得零。有关{{1}}和朋友如何工作的详情,请参阅the wiki

答案 1 :(得分:1)

“{”是在echo -n 0命令正常工作(通常是这种情况)的情况下在函数内执行的awk的结果。 从代码中不清楚为什么它是这样编写的。很明显,应该从文件中提取某些值,但是'if'条件似乎是检查错误的东西,'sed'的返回代码我打赌不是预期的。 (更好的候选人将是'grep'的返回代码。

所以我会写这样的函数:

function service_status {
    cd
    var=$(cat valor.txt | grep $1 | gawk '{print $1}' FS="|" | sed "s/ //g")
    if [ -z "$var" ]; then
        echo -n 0
    else
        echo -n "$var"
    fi
}

变量'var'将包含“搜索命令”的结果。如果搜索不返回任何值,那么'var'将为空,'0'将是函数的输出,否则'var'的内容将在输出上。