• 博客园logo
  • 会员
  • 众包
  • 新闻
  • 博问
  • 闪存
  • 赞助商
  • HarmonyOS
  • Chat2DB
    • 搜索
      所有博客
    • 搜索
      当前博客
  • 写随笔 我的博客 短消息 简洁模式
    用户头像
    我的博客 我的园子 账号设置 会员中心 简洁模式 ... 退出登录
    注册 登录
songzy-运维之旅
初级运维自我学习磨练
博客园    首页    新随笔    联系   管理    订阅  订阅
shell获取ip的方式1

1、以函数获取ip的案例

1)构建函数
function get_ip(){函数体 }
这个function关键字用于定义一个名为get_ip的函数

2)解析默认路由
array=($(echo "$route" | tr ' ' ' '))

array=($(/usr/sbin/ip route | tr ' ' ' '))


这个命令将route变量的内容转换为一个数组array,tr ' ' ' ' 用于将多个连续的空格替换为单个空格,确保数组的分割正确

ps:这里插入一个列出系统路由表的脚本,因为我想看array排列后的内容,其中/usr/sbin/ip route 可以用$route代替,但我的虚拟机操作系统是openeuler2203的x86,执行echo "$route"无任何输出

点击查看代码
array=($(/usr/sbin/ip route | tr ' ' ' '))
for element in "${array[@]}";do
    echo "$element";
done
@:当用在数组变量的上下文中时,@ 代表数组中的所有元素。在循环中使用 @ 可以遍历数组的每个元素。

3)查找设备名称
dev=""
初始化一个空字符串dev,用于存储找到的设备名称
for i in $(seq 0 $(( ${#array[@]} -1)));do
使用for循环遍历数组array的索引,生成从0到数组长度减1的序列,确保遍历数组的每个元素
if [[ "${array[i]}" == "dev" ]];then
使用 if 语句检查当前元素是否等于 "dev"。[[ "${array[i]}" == "dev" ]] 是条件表达式,用于比较字符串。注意,条件表达式以 [[ 开始,以 ]] 结束,并且中间有空格

点击查看代码
#!/bin/bash

dev=""
for i in $(seq 0 $(( ${#array[@]} - 1))); do
    if [[ "${array[i]}" == "dev" ]]; then
        dev="${array[i+1]}"
        break
    fi
done
echo "Device: $dev"

4)获取ip地址
ip_str=$(/usr/sbin/ip -4 addr show $dev | grep inet | awk '{print $2}' | cut -d '/' -f1 | head -1)
使用 ip -4 addr show $dev 获取指定网络接口的 IPv4 地址信息。然后通过 grep inet 过滤出包含 inet 的行,awk '{print $2}' 提取第二列(即 IP 地址和子网掩码),cut -d '/' -f1 提取 IP 地址部分,head -1 确保只获取第一个匹配的地址。结果存储在变量 ip_str 中

5)检查ip地址是否为空
检查 ip_str 是否为空。如果为空,输出错误信息并退出脚本,返回状态码 1

点击查看代码
if [ -z "$ip_str" ]; then
    echo "Unable to find a valid IP address."
    exit 1
fi
posted on 2025-01-15 11:50  宋之一  阅读(155)  评论(0)    收藏  举报
刷新页面返回顶部
博客园  ©  2004-2025
浙公网安备 33010602011771号 浙ICP备2021040463号-3