公司的无线环境采用mac地址认证的方式,mac地址被绑定到Radius的users配置文件中,将注册了的mac地址作为用户名和密码。为了方便的管理这些mac地址,自己写了一个shell脚本来管理。

shell脚本所特有的强大文本处理能力和各种命令函数的组合,使得管理员的工作能轻松不少。

下面就列出该脚本的功能以示参考:

  1. 添加mac地址

  2. 删除mac地址

  3. 查找mac地址

  4. 去除重复mac地址

  5. 检查mac地址合法性

  6. TODO,导入导出mac地址,添加注释

其中用到的Shell脚本技术包括但不限于:

  1. 文本文件的列处理和行处理,如sed、awk等命令

  2. 字符串查找、过滤、大小写转换,bash和grep等命令

  3. 获取、计算、比较字符串长度,bash和wc等命令

  4. mac地址正则表达式的处理和类型转换

  5. shell编程操作、包括文件包含、函数、参数传递、返回值等

  6. 其他

代码示例:

#!/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服务器相关推荐

  1. linux怎么判断网络是否正常运行,Linux shell脚本判断服务器网络是否可以上网

    微信公众号:「小林coding」 用简洁的方式,分享编程小知识. Linux shell脚本判断网络畅通 介绍 在编写shell脚本时,有的功能需要确保服务器网络是可以上网才可以往下执行,那么此时就需 ...

  2. Linux系统shell脚本之批量修改服务器密码

    Linux系统shell脚本之批量修改服务器密码 一.脚本要求 二.脚本内容 三.编辑原始旧密码 四.执行脚本 五.验证密码更改 1.查看更改后的密码文件 2.在远端服务器验证密码 一.脚本要求 可以 ...

  3. Linux shell 脚本编程-实战篇(二)

    继: Linux shell 脚本编程-实战篇(一) 2. 创建与数据库.Web及电子邮件相关的脚本 2.1 MySQL 数据库 2.1.1 MySQL 数据库安装 到 http://repo.mys ...

  4. shell脚本自动回车_干货分享:Linux shell脚本分享!!快收藏起来吧

    Linux shell 脚本分享 Shell 是一个命令解释器,处于内核和用户之间,负责把用户的指令传递给内核并且把执行结果回显给用户,Shell 它是一个用 C 语言编写的程序,它是用户使用 Lin ...

  5. Linux shell脚本语言必看书籍推荐

    以下书籍都是现在业内主流的Linux shell语言好书,同步收录在顶书,通过下面网址进入,实时读书: 顶书-提升IT技术和认知​i-book.top Linux Shell脚本攻略(第2版) 本书结 ...

  6. 100个Linux Shell脚本经典案例

    kill `ps -ef | grep redis | awk '{print $2}'` grep -w '\|aa\|bb'​​​​​​​ Linux 根据端口号杀进程的.sh脚本_xie_app ...

  7. LINUX SHELL脚本攻略笔记[速查]

    LINUX SHELL脚本攻略笔记[速查] Linux Shell脚本攻略笔记[速查] 资源 shell script run shell script echo printf 环境变量和变量 pgr ...

  8. Linux shell脚本基础学习

    Linux shell脚本基础学习这里我们先来第一讲,介绍shell的语法基础,开头.注释.变量和 环境变量,向大家做一个基础的介绍,虽然不涉及具体东西,但是打好基础是以后学习轻松地前提. 1. Li ...

  9. linux shell脚本字符串连接符,学习Linux shell脚本中连接字符串的方法

    这篇文章主要介绍了Linux shell脚本中连接字符串的方法,如果想要在变量后面添加一个字符,可以用一下方法: 代码如下: $value1=home $value2=${value1}"= ...

最新文章

  1. windows如何安装python-windows下安装python过程
  2. 服务器不响应Ajax,web前端:解决在IE11浏览器下,JQuery的AJAX方法不响应问题
  3. CSS设置图片的重复
  4. c语言 12大于12么,【C语言】第十二章
  5. Shiro安全框架的使用
  6. PE文件结构详解(六)重定位
  7. Android 取得 ListView中每一个Item项目的值
  8. java虚拟机和javaGC_Java虚拟机(三):GC算法和种类
  9. Fedora/RedHat上搭建MariaDB
  10. Tensorflow关于Dataset的一般操作
  11. BOBSLEDDING(一道有趣的贪心题 nyoj309)
  12. ubuntu安装锐捷客户端
  13. MySQL之可视化软件
  14. c语言语法c11,_Atomic类型说明符和限定词之间的C11语法模糊
  15. BlueCoat ProxySG配置FTP代理
  16. Python数据分析——matplotlib
  17. 第三方服务之Bmob——快速入门
  18. sublime text 编译时提示[WinError 2] 系统找不到指定的文件。
  19. CSS3 animation动画,风车旋转、loading、人物走路动画案例
  20. python面向对象OOP编程(三)-- 同类 不同实例 之间的关联关系

热门文章

  1. Spark Stream整合flum和kafka,数据存储在HBASE上,分析后存入数据库
  2. m_Orchestrate learning system---六、善用组件插件的好处是什么
  3. JAVA并发-为现有的线程安全类添加原子方法
  4. 使用C#+Linq+SQL快速开发业务
  5. Android 中的 Service 全面总结(转)
  6. Ubuntu显示隐藏文件和文件夹
  7. 第二话 最最最简单的计算机
  8. 虚拟化:IT技术的第三次革命
  9. Java 数字转换成汉字
  10. vue 传递多行数据_vue 数据传递的方法