【问题标题】:Shell script run with mac address validate使用 mac 地址验证运行的 Shell 脚本
【发布时间】:2018-08-16 18:25:39
【问题描述】:
我们可以运行shell脚本并检查系统mac地址验证然后处理。
#!/bin/bash
### here i need to check system mac address
### if mac is not match then script will not run
killall gnome-terminal
echo "End Of Day Session Complete"
请建议
【问题讨论】:
标签:
linux
shell
mac-address
【解决方案1】:
为什么不呢。首先获取系统的mac address 并将其存储在shell 脚本或配置文件中的变量中。每次运行脚本时,首先获取系统的mac address,并与已经存储在脚本变量中的mac id进行比较,如果相同则继续,如果不只是退出。使用ifconfig -a 命令获取系统的mac地址并将其存储在配置文件或脚本中。
【解决方案2】:
可以这样获取硬件地址:
LC_ALL=C ifconfig | egrep "HWaddr" | awk '{print $5}'
但请注意:
- mac 接口可能不止一个
- 在许多系统上,mac 可以被欺骗
要暂停工作,只需退出即可。不要全部杀掉,如果你这样做了,不要指望稍后的回显消息会被别人看到。
【解决方案3】:
由于您想在多个系统上运行代码,您可以使用关联数组来存储要运行脚本的系统的 MAC 地址
declare -A valid_mac
valid_mac["00:00:00:00:00:00"]=1
valid_mac["00:00:00:00:00:01"]=1
valid_mac["00:00:00:00:00:02"]=1
如果 mac 地址有效,您的脚本功能是终止运行它的每台机器上的所有 gnome-terminal 会话。
让我们定义一个函数
function kill_all_terms(){
killall gnome-terminal
echo "End Of Day Session Complete"
}
现在你想在每台机器上获取这台机器的 MAC 地址列表。有很多方法可以做到这一点。下面的函数列出了所有使用 shell 字符串解析功能的 IPv4 接口的 MAC 地址
function macs(){
local macs line l1
while read line ; do
l1="${line#*link/ether }" ;
macs="${l1% brd*} ${macs}" ;
done < <( ip -4 -o link ) ;
echo "${macs}"
}
现在我们可以定义主循环了
function main() {
for mac in $(macs) ; do
if [ -n "${valid_mac[$mac]}" ] ; then
kill_all_terms
break
fi
done
}
最后只运行main() as
main "$@"