Shell脚本使用mac地址验证运行

时间:2018-03-08 11:53:06

标签: linux shell mac-address

我们可以运行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"

plz建议

3 个答案:

答案 0 :(得分:1)

为什么不呢。首先获取系统的mac address并将其存储在shell脚本或配置文件中的变量中。每次运行脚本时,首先获取系统的mac address并与已存储在脚本变量中的mac id进行比较,如果相同则继续,如果不是,则退出。使用ifconfig -a命令获取系统的mac地址,并将其存储在配置文件或脚本中。

答案 1 :(得分:0)

可以像这样获得硬件地址:

LC_ALL=C ifconfig | egrep "HWaddr" | awk '{print $5}'

但请注意:

  • 可能有多个接口与mac
  • 在许多系统上,mac可以被欺骗

要暂停工作,请退出。不要killall,如果你这样做,不要指望某人可以看到以后的回音信息。

答案 2 :(得分:0)

由于您希望在多个系统上运行代码,因此可以使用关联数组来存储要运行脚本的系统的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()作为

运行
 main "$@"