我已登录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
但当然它不起作用。我逻辑上无法理解,我该怎么做?你能帮助我吗 ?谢谢你的关注。
答案 0 :(得分: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日志(更不用说你的日志)进行测试了,所以还没有经过适当的测试。
答案 1 :(得分:0)
您还可以使用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 )
请注意,tail -n 1
head -n 1