【问题标题】: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"

请建议

【问题讨论】:

  • 为什么要killall而不是直接退出?

标签: 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 "$@"
      

      【讨论】:

        猜你喜欢
        • 2014-07-12
        • 1970-01-01
        • 2014-09-29
        • 1970-01-01
        • 1970-01-01
        • 2020-11-20
        • 1970-01-01
        • 2017-05-24
        • 2012-09-29
        相关资源
        最近更新 更多