当前位置: 技术问答>linux和unix
菜鸟求助2个简单的shell脚本!
来源: 互联网 发布时间:2016-09-21
本文导语: 使用命令: last 显示如下: 用户 接口 IP地址 日期 开始时间 结束时间 在线时间 -----------------------------------------------------------------------------...
使用命令: last
显示如下:
用户 接口 IP地址 日期 开始时间 结束时间 在线时间
--------------------------------------------------------------------------------------------------------
test1 ppp1 192.168.1.60 Tue Aug 24 10:28 - 10:32 (00:04)
test1 ppp0 192.168.1.69 Tue Aug 24 10:29 still logged in
test1 ppp3 192.168.1.69 Tue Aug 24 10:27 still logged in
user ppp2 192.168.1.68 Tue Aug 24 15:41 still logged in
--------------------------------------------------------------------------------------------------------------
logged in 代表在线! still 也一样代表在线
有结束时间以及在线时间代表不在线
需求!!
使用last 查看连接信息,判断用户是否重复并且都处于在线的话. 就使用
分不多了!!。。。
那位高人指点下!! 特别是第一个!! 最好能加注释
比如上图! 发现test1用户有2个连接 并且都处于在线状态! 这个时候就 执行 ifconfig ppp3 down 或者 ifconfig ppp0 down .
另外一个问题是!
使用 telnet localhost 7550 登录 登录后执行 kill $1 最后执行退出命令quit
$1 是在运行脚本时 附带的参数!
显示如下:
用户 接口 IP地址 日期 开始时间 结束时间 在线时间
--------------------------------------------------------------------------------------------------------
test1 ppp1 192.168.1.60 Tue Aug 24 10:28 - 10:32 (00:04)
test1 ppp0 192.168.1.69 Tue Aug 24 10:29 still logged in
test1 ppp3 192.168.1.69 Tue Aug 24 10:27 still logged in
user ppp2 192.168.1.68 Tue Aug 24 15:41 still logged in
--------------------------------------------------------------------------------------------------------------
logged in 代表在线! still 也一样代表在线
有结束时间以及在线时间代表不在线
需求!!
使用last 查看连接信息,判断用户是否重复并且都处于在线的话. 就使用
ifconfig $接口名 down掉一个接口。随机(或者固定)down 其中一个都行!
分不多了!!。。。
那位高人指点下!! 特别是第一个!! 最好能加注释
比如上图! 发现test1用户有2个连接 并且都处于在线状态! 这个时候就 执行 ifconfig ppp3 down 或者 ifconfig ppp0 down .
另外一个问题是!
使用 telnet localhost 7550 登录 登录后执行 kill $1 最后执行退出命令quit
$1 是在运行脚本时 附带的参数!
|
#!/bin/sh
user=`last | grep "still" | awk '{print $2" "$1}' | sort -k2 | uniq -f1 -d | awk '{print $1}'`
for one in $user
do
ifconfig $one down
done
|
没有linux环境, 仅供参考
last | awk '/in$/&&a[$1]++{print "ifconfig "$2" down"}' | sh
last | awk '/in$/&&a[$1]++{print "ifconfig "$2" down"}' | sh
|
last | awk '/in$/ && (++a[$1]){print "ifconfig "$2" down"}' | sh
这样呢?
这样呢?
|
1楼的在cygwin下测试可以,大概解释一下
管道就不用说了
awk是UNIX下强大的文本处理工具
/in$/&&a[$1]++ //表示条件,/in$/表示匹配in结尾的行,$1表示第一列,即用户名,整个条件就是“行以in结尾,并且a[$1]!=0(该用户之前出现过,即重复用户)”
print "ifconfig "$2" down" //满足条件后打印,$2第二列,即端口名
最后通过sh执行ifconfig。。。
管道就不用说了
awk是UNIX下强大的文本处理工具
/in$/&&a[$1]++ //表示条件,/in$/表示匹配in结尾的行,$1表示第一列,即用户名,整个条件就是“行以in结尾,并且a[$1]!=0(该用户之前出现过,即重复用户)”
print "ifconfig "$2" down" //满足条件后打印,$2第二列,即端口名
最后通过sh执行ifconfig。。。
|
传说中的管道工~~~