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

2021-09-19  本文已影响0人  jkwen

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

这次是在实际项目中遇到一个需求,想着能否用 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 脚本删除文件

上一篇下一篇

猜你喜欢

热点阅读