linux网络检测脚本

来源:互联网 发布:怎么强制删除mac软件 编辑:程序博客网 时间:2024/05/22 13:40
#!/bin/bash

#设置全局变量
dev_name=""
ip=""

# 输出错误信息并且返回错误码 结束脚本执行
exit_str() {
    echo $1
    exit $2
}

# 判断是否有管理员的权限
is_root() {
    test $UID -ne 0 && exit_str "请使用sudo运行此脚本!" 1
}

# 获取网卡设备名
get_dev_name() {
    dev_name=$(ifconfig | egrep 'enp|eth' | cut -d\  -f1)
    test -z "$dev_name" && exit_str "网卡设备找不到, 请检查网卡是否启动!" 2
    dev_name=${dev_name%:*}
    test "x$1" = "xout" && exit_str $dev_name 0
}

# 查看网线是否连通 mii-tool
is_dev_ok() {
    test -z "$ip" || return
    test -z "$dev_name" && get_dev_name
    mii-tool $dev_name 2> /dev/null | grep 'link ok' &> /dev/null \
            || exit_str "$dev_name: 网线没有插好,请检测!" 3
}

# 查看本机IP地址
get_ip() {
    test -z "$ip" || return
    test -z $dev_name && get_dev_name
    export LANG=en_US.UTF-8
    export LANGUAGE=en_US:en
    local ipMsg=$(ifconfig $dev_name)
    ip=${ipMsg#*addr:}
    ip=${ip%% Bcast:*}
    test -z "$ip" && exit_str "$dev_name: 没有设置本机IP地址!" 4
    test "x$1" = "xout" && exit_str $ip 0
}

# ping操作 需要传递要ping的参数
mping() {
    test -z "$1" && return 1
    ping -c 1 $1 &> /dev/null && return 0 || return 1
}

# 主函数,全程检测网络情况
main() {
    is_root
    is_dev_ok
    get_ip
    # ping网关
    gwip=${ip%.*}.1
    mping $gwip || exit_str "$gwip: 网关ping不通!" 5
    # ping域名解析服务器(DNS) 223.5.5.5 / 8.8.8.8
    mping 223.5.5.5 || exit_str "请检查路由表是否设置默认网关!" 6
    # ping域名(百度)
    mping www.baidu.com || exit_str "请检查是否正确指定DNS解析服务器!" 7
    echo "你的网络没有任何问题!"
}

# 让程序接受参数,根据不同的参数做不同功能
# ping子命令  调用mping
# ip子命令    调用get_ip
# dev子命令   调用get_dev_name
run_command() {
    case "$1" in
        ping)
            test -z "$2" && exit_str "ping子命令必须指定目标!" 100
            mping $2
            exit $?
            ;;
        ip)
            test -z "$2" && get_ip out
            ip=$2
            main
            ;;
        dev)
            # 如果有第二个参数代表设置设备名
            test -z "$2" && get_dev_name out
            dev_name=$2
            main
            ;;
        *)
            echo "暂不支持 $1 子命令功能!"
            ;;
    esac
}

# 根据参数运行主函数
test -z "$1" && main  || run_command $@
0 0
原创粉丝点击