【BASH工具】获取指定的网卡所在网络中正在使用的ip及可配置的ip

版权声明:本文为博主原创文章,未经博主允许不得转载。 https://blog.csdn.net/liudglink/article/details/84787664
#!/usr/bin/env bash
#=================================================================
# CPSTR: Copyright (c) 2018 By Abodu, All Rights Reserved.
# FNAME: getAvailableIPAddr.sh
# AUTHR: abodu,[email protected]
# CREAT: 2018-12-04 14:06:44
# ENCOD: UTF-8 Without BOM
# VERNO: 0.0.1
# LUPTS: 2018-12-04 14:06:44
#=================================================================
getAvailableIPAddr() {
  local gfunc=$FUNCNAME
  function gai_usage() {
    echo
    echo "$gfunc - 获取指定的网卡所在网络中正在使用的ip及可配置的ip"
    echo
    echo "Usage: $gfunc {[-h] | <-n nicName> }"
    echo
  }
  function gai_ca() {
    if [ "X$1" == "X" ]; then
      gai_usage
      return 1
    fi
    case $1 in
    -[nN] | --nic-name)
      shift
      nic=$1
      ;;
    -[hH] | --help)
      gai_usage
      return 1
      ;;
    *)
      [ "X${1:0:1}" != "X-" ] && nic=$1
      ;;
    esac
    return 0
  }
  function display_ipaddr() {
    local ip_can_use='ip_can_use.txt'
    local ip_using='ip_using_now.txt'
    >$ip_using
    >${ip_can_use}
    echo 'IP Using Now:'
    for x in ${1}.{1..254}; do
      ping -c 3 $x &>/dev/null
      if [ $? -ne 0 ]; then
        echo $x >>$ip_can_use
      else
        echo $x | tee -a $ip_using
      fi
    done
    echo "IP Available:"
    cat $ip_can_use
  }
  local nic=
  gai_ca $@
  [ $? -ne 0 ] && return
  if [ "X$nic" == "X" ]; then
    echo "you must provides a nic-name"
    echo
    gai_usage
    return
  fi
  case $nic in
  [38])
    nic=enp${nic}s0
    ;;
  [86][01])
    nic=enp${nic:0:1}s0f${nic:1:1}
    ;;
  esac
  [ "X$nic" == "Xlo" ] && return
  local cur_ipaddr=$(ip -4 addr show $nic | sed -n '/inet /p' | awk '{print $2}')
  [ "X$cur_ipaddr" == "X" ] && return
  display_ipaddr ${cur_ipaddr%.*}
}
getAvailableIPAddr $@

猜你喜欢

转载自blog.csdn.net/liudglink/article/details/84787664