脚本类的编程在我看来目的性很强,就是说,我们一般会要实现某个功能而选用脚本来完成。我对脚本语言没研究,只是在用到的时候现学现用,这样能最快解决我的问题,不过如果要更高级的玩法,还得好好学学。
这次是在实际项目中遇到一个需求,想着能否用 shell 脚本实现,于是便开始边查资料边实现。写这篇文章说明我达到了我的期望,其次也是记录一下,方便下次回顾。
需求
- 获取到电脑的 ip,并写在一个文件里。
- ip 值形如 192.168.1.1,文件也是有固定位置要求的。
- 因为有文件有固定位置要求,就需要用户输入一个根目录(因为相对位置是一样的,根目录不同)。
- 对同个设备来说,根目录不会经常变,所以最好用户只输入一次,之后就不要输入了。
- 对文件及路径是否存在做校验判空。
分析实现
我在最初的实现只是想尝试需求的 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 脚本删除文件