gpt4 book ai didi

linux - 在 bash 中不工作循环

转载 作者:太空宇宙 更新时间:2023-11-04 09:16:19 26 4
gpt4 key购买 nike

我在 redmine 中有关于用户的日志,这些用户是从我服务器的 ip 连接的。我可以通过命令做到这一点:

tail -n 100000/usr/share/redmine/log/production.log | grep -A 3 "192.168.110.50"| grep“当前用户” | awk '{print $3}' |头-n 1 |尾-n 1

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

没问题:

temp=$(tail -n 100000/usr/share/redmine/log/production.log | grep -A 3 "192.168.110.50"| grep "当前用户"| awk '{print $3}' | 头-n 1 | 尾-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

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

最佳答案

直接的问题是您正在设置变量 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 日志(更不用说你的)来测试了,所以这还没有经过适当的测试。

关于linux - 在 bash 中不工作循环,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/47280273/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com