用Linux Shell脚本轻松管理Radius服务器
公司的无线环境采用mac地址认证的方式,mac地址被绑定到Radius的users配置文件中,将注册了的mac地址作为用户名和密码。为了方便的管理这些mac地址,自己写了一个shell脚本来管理。
shell脚本所特有的强大文本处理能力和各种命令函数的组合,使得管理员的工作能轻松不少。
下面就列出该脚本的功能以示参考:
添加mac地址
删除mac地址
查找mac地址
去除重复mac地址
检查mac地址合法性
TODO,导入导出mac地址,添加注释
其中用到的Shell脚本技术包括但不限于:
文本文件的列处理和行处理,如sed、awk等命令
字符串查找、过滤、大小写转换,bash和grep等命令
获取、计算、比较字符串长度,bash和wc等命令
mac地址正则表达式的处理和类型转换
shell编程操作、包括文件包含、函数、参数传递、返回值等
其他
代码示例:
#!/bin/bash ## Source function library. . /etc/rc.d/init.d/functionsRADIUSD=/usr/sbin/radiusd LOCKF=/var/lock/subsys/radiusd CONFIG=/etc/raddb/radiusd.conf USERCONFIG=/etc/raddb/users[ -f $RADIUSD ] || exit 0 [ -f $CONFIG ] || exit 0 [ -f $USERCONFIG ] || exit 0RETVAL=0OPERATION=$1 MACADDRESS=$2function help() {clearecho $""echo $"===================================================================================="echo $"For Radius on Fedora/CentOS/RadHat Linux Server, Written by Chris"echo $"===================================================================================="echo $"A tool to manage Radius server"echo $""echo $"Usage: $0 {find|add|modify|delete|check|remove|start|stop|status|restart|reload} mac"#TODOecho $"Usage: $0 {import|export|debug}"echo $""echo $"For more information please contract dgdenterprise@gmail.com"echo $"===================================================================================="echo $""exit 1 }function mac() {if [ -z $MACADDRESS ];thenecho $"no mac address is signed! "echo $"\$2 is $MACADDRESS"exit 1elseif [[ "${#MACADDRESS}" != "12" ]] && [[ "${#MACADDRESS}" != "17" ]] ;thenecho "mac length is ${#MACADDRESS}"echo "mac address is illegal! "exit 1 # else # echo $"mac which you input is $MACADDRESS"fi#echo $MACADDRESS | sed -nr '/[A-Fa-f0-9]{2}:[A-Fa-f0-9]{2}:[A-Fa-f0-9]{2}:[A-Fa-f0-9]{2}:[A-Fa-f0-9]{2}:[A-Fa-f0-9]{2}/p'#echo $MACADDRESS | sed -nr '/[A-Fa-f0-9]{2}-[A-Fa-f0-9]{2}-[A-Fa-f0-9]{2}-[A-Fa-f0-9]{2}-[A-Fa-f0-9]{2}-[A-Fa-f0-9]{2}/p'#echo $MACADDRESS | sed -nr '/[A-Fa-f0-9]{12}/p'if [[ `echo $MACADDRESS | grep -` ]];thenPROMAC=`echo $MACADDRESS | sed -nr '/[A-Fa-f0-9]{2}-[A-Fa-f0-9]{2}-[A-Fa-f0-9]{2}-[A-Fa-f0-9]{2}-[A-Fa-f0-9]{2}-[A-Fa-f0-9]{2}/p' | tr '[:upper:]' '[:lower:]' | sed 's/-//g'`elif [[ `echo $MACADDRESS | grep :` ]];thenPROMAC=`echo $MACADDRESS | sed -nr '/[A-Fa-f0-9]{2}:[A-Fa-f0-9]{2}:[A-Fa-f0-9]{2}:[A-Fa-f0-9]{2}:[A-Fa-f0-9]{2}:[A-Fa-f0-9]{2}/p' | tr '[:upper:]' '[:lower:]' | sed 's/://g'`elsePROMAC=`echo $MACADDRESS | tr '[:upper:]' '[:lower:]'`fiecho $PROMACfi }function find() {MAC=`mac`echo $"accepted mac is $MAC"if [[ `grep $MAC $USERCONFIG` ]]; thenMACLINE=`grep -n $MAC $USERCONFIG | awk -F ':' '{print $1}'`#echo $MACLINEMACLINECOUNT=$(echo $MACLINE | wc -w)#echo $MACLINECOUNTif [[ "$MACLINECOUNT" != "1" ]];thenecho $"ERROR, this mac $MAC has duplicate record, you should use $0 remove $MAC to remove duplicate record"exit 1fiecho $"Successfully find $MAC in $MACLINE line of file $USERCONFIG! "echoREVAL=$?elseecho $"Can not find $MAC in file $USERCONFIG! "echoexit 1REVAL=$?fi }function add() {MAC=`mac`echo $"accepted mac is $MAC"#find $MACLINENUM=`grep -n "Cleartext-Password :='" $USERCONFIG | grep -v \# | head -n1 | awk -F ":" '{print $1}'`SEDOPERATION=$LINENUM"a"sed -i "$SEDOPERATION $MAC Cleartext-Password :='$MAC'" $USERCONFIGfind $MACrestart }function modify() {MAC=`mac`find $MAC#TODO}function delete() {MAC=`mac`echo $"accepted mac is $MAC"if [[ `grep $MAC $USERCONFIG` ]]; thenMACLINE=`grep -n $MAC $USERCONFIG | awk -F ':' '{print $1}'`##echo $MACLINE#MACLINECOUNT=$(echo $MACLINE | wc -w)##echo $MACLINECOUNT#if [[ "$MACLINECOUNT" != "1" ]];then# echo $"ERROR, this mac $MAC has duplicate record, you should use $0 remove $MAC to remove duplicate record"# exit 1#fiecho $"Successfully find $MAC in $MACLINE line of file $USERCONFIG! "echo $"It will be deleted! "sed -i "$MACLINE d" $USERCONFIG#TODOecho $"If you see 'Can not find $MAC in file $USERCONFIG! ', it means successfully! "find $MACechoREVAL=$?elseecho $"Can not find $MAC in file $USERCONFIG! "echoREVAL=$?fi }function check() {MAC=`mac`find $MACremove $MAC }function remove() {MAC=`mac`echo $"accepted mac is $MAC"#TODO#echo $"backuped file to file $FILENAME"if [[ `grep $MAC $USERCONFIG` ]]; thenMACLINE=`grep -n $MAC $USERCONFIG | awk -F ':' '{print $1}'`#echo $MACLINEMACLINECOUNT=$(echo $MACLINE | wc -w)#echo $MACLINECOUNTif [[ "$MACLINECOUNT" == "1" ]];thenecho $"WARNNING, this mac $MAC is good record, no duplicate record has found! "exit 0fiTOREMOVE="$MAC Cleartext-Password :='$MAC'"sed -i "/^$TOREMOVE$/d" $USERCONFIGadd $MACfi }function restart() {service radiusd restart }function reload() {service radiusd reload }function status() {service radiusd status }case "$1" in find)findRETVAL=$?;;add)addRETVAL=$?;;modify)modifyRETVAL=$?;;delete)deleteRETVAL=$?;;check)checkRETVAL=$?;;remove)removeRETVAL=$?;;start)startRETVAL=$?;;stop)stopRETVAL=$?;;status)statusRETVAL=$?;;restart)restartRETVAL=$?;;reload)reloadRETVAL=$?;;*)helpexit 1;; esac
其中有一些可以改进的地方,比如换一种方法或者增强用户的使用体验都是可以的,欢迎大家提出意见。
用Linux Shell脚本轻松管理Radius服务器相关推荐
- linux怎么判断网络是否正常运行,Linux shell脚本判断服务器网络是否可以上网
微信公众号:「小林coding」 用简洁的方式,分享编程小知识. Linux shell脚本判断网络畅通 介绍 在编写shell脚本时,有的功能需要确保服务器网络是可以上网才可以往下执行,那么此时就需 ...
- Linux系统shell脚本之批量修改服务器密码
Linux系统shell脚本之批量修改服务器密码 一.脚本要求 二.脚本内容 三.编辑原始旧密码 四.执行脚本 五.验证密码更改 1.查看更改后的密码文件 2.在远端服务器验证密码 一.脚本要求 可以 ...
- Linux shell 脚本编程-实战篇(二)
继: Linux shell 脚本编程-实战篇(一) 2. 创建与数据库.Web及电子邮件相关的脚本 2.1 MySQL 数据库 2.1.1 MySQL 数据库安装 到 http://repo.mys ...
- shell脚本自动回车_干货分享:Linux shell脚本分享!!快收藏起来吧
Linux shell 脚本分享 Shell 是一个命令解释器,处于内核和用户之间,负责把用户的指令传递给内核并且把执行结果回显给用户,Shell 它是一个用 C 语言编写的程序,它是用户使用 Lin ...
- Linux shell脚本语言必看书籍推荐
以下书籍都是现在业内主流的Linux shell语言好书,同步收录在顶书,通过下面网址进入,实时读书: 顶书-提升IT技术和认知i-book.top Linux Shell脚本攻略(第2版) 本书结 ...
- 100个Linux Shell脚本经典案例
kill `ps -ef | grep redis | awk '{print $2}'` grep -w '\|aa\|bb' Linux 根据端口号杀进程的.sh脚本_xie_app ...
- LINUX SHELL脚本攻略笔记[速查]
LINUX SHELL脚本攻略笔记[速查] Linux Shell脚本攻略笔记[速查] 资源 shell script run shell script echo printf 环境变量和变量 pgr ...
- Linux shell脚本基础学习
Linux shell脚本基础学习这里我们先来第一讲,介绍shell的语法基础,开头.注释.变量和 环境变量,向大家做一个基础的介绍,虽然不涉及具体东西,但是打好基础是以后学习轻松地前提. 1. Li ...
- linux shell脚本字符串连接符,学习Linux shell脚本中连接字符串的方法
这篇文章主要介绍了Linux shell脚本中连接字符串的方法,如果想要在变量后面添加一个字符,可以用一下方法: 代码如下: $value1=home $value2=${value1}"= ...
最新文章
- windows如何安装python-windows下安装python过程
- 服务器不响应Ajax,web前端:解决在IE11浏览器下,JQuery的AJAX方法不响应问题
- CSS设置图片的重复
- c语言 12大于12么,【C语言】第十二章
- Shiro安全框架的使用
- PE文件结构详解(六)重定位
- Android 取得 ListView中每一个Item项目的值
- java虚拟机和javaGC_Java虚拟机(三):GC算法和种类
- Fedora/RedHat上搭建MariaDB
- Tensorflow关于Dataset的一般操作
- BOBSLEDDING(一道有趣的贪心题 nyoj309)
- ubuntu安装锐捷客户端
- MySQL之可视化软件
- c语言语法c11,_Atomic类型说明符和限定词之间的C11语法模糊
- BlueCoat ProxySG配置FTP代理
- Python数据分析——matplotlib
- 第三方服务之Bmob——快速入门
- sublime text 编译时提示[WinError 2] 系统找不到指定的文件。
- CSS3 animation动画,风车旋转、loading、人物走路动画案例
- python面向对象OOP编程(三)-- 同类 不同实例 之间的关联关系