【发布时间】: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
但它当然不起作用。我无法从逻辑上理解,我该怎么做?你能帮助我吗 ?感谢您的关注。
【问题讨论】:
-
能否提供minimal reproducible example,以便我们可以对原始数据进行一些操作并更好地理解问题?
标签: linux bash shell while-loop do-while