【问题标题】:Does not work loop while in bash在 bash 中不能循环工作
【发布时间】:2018-04-27 01:50:00
【问题描述】:

我有登录 redmine,关于用户,从我的服务器的 ip 连接。我可以通过命令做到这一点:

tail -n 100000 /usr/share/redmine/log/production.log | grep -A 3 "192.168.110.50" | grep "Current user" | awk '{print $3}' | head -n 1 | tail -n 1

我需要把这个参数写在变量里。

没问题:

temp=$(tail -n 100000 /usr/share/redmine/log/production.log | grep -A 3 "192.168.110.50" | grep "Current user" | awk '{print $3}' | head -n 1 | tail -n 1)

它有效。但它可以返回用户名anonymous。要返回其他用户名,我应该写 head -n 2。如果它仍然是anonymous,我可以将我的公式更改为head -n 3

所以……我当然可以做这项工作

#!/bin/bash
temp=$(tail -n 100000 /usr/share/redmine/log/production.log | grep -A 3 "192.168.110.50" | grep "Current user" | awk '{print $3}' | head -n 1 | tail -n 1)

if [[ $temp == "anonymous" ]]; then
temp=$(tail -n 100000 /usr/share/redmine/log/production.log | grep -A 3 "192.168.110.50" | grep "Current user" | awk '{print $3}' | head -n 2 | tail -n 1)
fi

但它只适用于一次迭代。我试图:

while [ $tmp != "anonymous" ]; do
temp=$(tail -n 100000 /usr/share/redmine/log/production.log | grep -A 3 "192.168.110.50" | grep "Current user" | awk '{print $3}' | head -n ((var=var+1)) | tail -n 1)
done

但它当然不起作用。我无法从逻辑上理解,我该怎么做?你能帮助我吗 ?感谢您的关注。

【问题讨论】:

标签: linux bash shell while-loop do-while


【解决方案1】:

你也可以使用grep -v

temp=$(tail -n 100000 /usr/share/redmine/log/production.log | grep -A 3 "192.168.110.50" | grep "Current user" | grep -v "anonymous" | awk '{print $3}' | head -n 1 )

请注意,head -n 1 之后不需要最终的 tail -n 1

【讨论】:

    【解决方案2】:

    直接的问题是您设置变量temp,但检查tmp。您还需要在变量两边加上双引号,以防它是空白、通配符或其他麻烦的东西。

    但是有一个更简单的方法,因为awk 可以自己处理大部分工作:

    tail -n 100000 /usr/share/redmine/log/production.log |
        grep -A 3 "192.168.110.50" |
        awk '/Current user/ {if ($3 != "anonymous") {print $3; exit}}'
    

    实际上也可以让awk 句柄查看“192.168.110.50”之后的行,但这会稍微复杂一些。顺便说一句,因为我没有任何 redmine 日志(更不用说你的)来测试了,所以这还没有经过适当的测试。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2016-12-21
      • 1970-01-01
      • 2018-06-11
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2016-10-10
      • 2017-12-12
      相关资源
      最近更新 更多