美文网首页
Shell 脚本-实现获取网络 ip 并输出文件的小功能

Shell 脚本-实现获取网络 ip 并输出文件的小功能

作者: jkwen | 来源:发表于2021-09-19 08:49 被阅读0次

    脚本类的编程在我看来目的性很强,就是说,我们一般会要实现某个功能而选用脚本来完成。我对脚本语言没研究,只是在用到的时候现学现用,这样能最快解决我的问题,不过如果要更高级的玩法,还得好好学学。

    这次是在实际项目中遇到一个需求,想着能否用 shell 脚本实现,于是便开始边查资料边实现。写这篇文章说明我达到了我的期望,其次也是记录一下,方便下次回顾。

    需求

    1. 获取到电脑的 ip,并写在一个文件里。
    2. ip 值形如 192.168.1.1,文件也是有固定位置要求的。
    3. 因为有文件有固定位置要求,就需要用户输入一个根目录(因为相对位置是一样的,根目录不同)。
    4. 对同个设备来说,根目录不会经常变,所以最好用户只输入一次,之后就不要输入了。
    5. 对文件及路径是否存在做校验判空。

    分析实现

    我在最初的实现只是想尝试需求的 1,2 点,后面是在调试过程中,从用户实际使用的角度出发做的完善。就先从 1, 2 点来说。

    第一步

    获取 ip 的方式,

    ifconfig -a|grep inet|grep -v 127.0.0.1|grep -v inet6|awk '{print $2}'|tr -d "addr:"
    

    拿到 ip 之后我希望对 ip 进行输出,变成一个类似这样的配置 localIp="http://192.168.1.1/interface/prefix",
    所以下一步我要做的就是形成这样一句话,

    echo "192.168.1.1" > "需要用户输入配置的根目录/"config.properties
    

    这句话就能将 "192.168.1.1" 输出到文件 config.properties 里。
    总体的实现是这样的,

    #!/usr/bin/bash
    ipValue=$(ifconfig -a|grep inet|grep -v 127.0.0.1|grep -v inet6|awk '{print $2}'|tr -d "addr:")
    echo "http://${ipValue}/interface/prefix" > config.properties
    

    第二步

    接下去需要能让用户首次指定 config 文件输出路径,

    #这可以提示用户输入
    echo "请输入文件路径"
    read path
    

    如何只让用户配置一次 config 文件输出路径呢?我想肯定需要一个地方来存,并且脚本运行时先要去取,取不到就提示用户配置,

    file="ip_path.txt"
    if [ ! -f file ]
    then
      #提示用户输入,并且将路径存起来
      echo ${path} > file
    else
      path=$(cat file)
    fi
    

    好了,现在用户不用每次都填写配置路径了。

    第三步

    最后我对用户输入的 path 路径是否存在做了校验,如果路径不存在将会做删除操作,确保下次还让用户输入。

    注意点

    运行脚本时,sh 和 bash 其实是不一样的,上述我说的其实要基于 bash,如果用 sh 就会报一些语法错误,这是我在调试过程中遇到的坑,究其原因,应该就是内在的执行脚本不同。

    总结

    网上关于 shell 脚本的资料还是很好找的,实现一些基本功能没问题,但高深的可能就要对 linux 等相关的知识要有一定了解。

    参考内容

    shell 脚本获取 ip 地址
    shell 脚本文件输入输出
    shell 脚本 read 指令
    shell 脚本 if-else 语句
    shell 脚本读取文件内容
    shell 脚本删除文件

    相关文章

      网友评论

          本文标题:Shell 脚本-实现获取网络 ip 并输出文件的小功能

          本文链接:https://www.haomeiwen.com/subject/xseugltx.html