概述:
我的上一篇文章Linux正则过滤命令ifconfig/ip提取IP地址 介绍了如何利用正则过滤得到IP地址,是利用组合命令获取的,那么问题就来了,如果是高频使用,每次都输入一大串命令来获取,多不方便呀?所以,本文章来介绍如何利用SHELL封装起来这些命令,方便使用者。
准备:
1、第一行 #!/bin/bash 在宣告这个 script 使用的 shell 名称: 因为我们使用的是 bash ,所以,必须要以“ #!/bin/bash ”来宣告这个文件内的语法使用 bash 的语法!
2、程序内容的说明: 整个 script 当中,除了第一行的“ #! ”是用来宣告 shell 的之外,其他的#都是“注解”用途!
3、主要环境变量的宣告: 建议务必要将一些重要的环境变量设置好,PATH 与 LANG (如果有使用到输出相关的信息时) 是当中最重要的!
4、要养成良好的 script 撰写习惯,在每个 script 的文件开始处记录好:
script 的功能;
script 的版本信息;
script 的作者与联络方式;
script 的 History (历史纪录);
script 运行时需要的环境变量预先宣告与设置;
script 内较特殊的指令,使用“绝对路径”的方式来下达;
分析:
该出我就偷懒一下,直接放出写好的SHELL内容,至于当中的命令详解可以参考我上篇文章Linux正则过滤命令ifconfig/ip提取IP地址 ,里面有我的SHELL的主要内容。
#!/bin/bash
#Program:
# Get the ip from ipcofing.
#History:
#2016/12/19 Tim First release
Path=/bin:/sbin:/usr/bin:/usr/sbin:usr/local/bin:usr/local/sbin:~/bin
export Path
#1/告诉使用者,这程序的用户是从ipconfig命令中获取IP地址
echo "该程序是从命令ifcongfig中获取IP地址:"
#2/提示使用者,输入将要查询设备的名字。
read -p "请输入想要查询IP的设备名字:(eth0/eth1/eth2/HELP):" Dev
case ${Dev} in
"HELP")
echo "如果不知道您电脑设备号,可以通过命令/etc/udev/rules.d/70-persistent-net.rules 查看。"
exit 1
;;
"")
echo "请输入内容,如eh0/eh1/eh2/HELP"
exit 1
;;
"eth0")
ifconfig eth0 | grep 'inet ' | sed s/^.*addr://g | sed s/Bcast.*$//g
;;
"eth1")
ifconfig eth1 | grep 'inet ' | sed s/^.*addr://g | sed s/Bcast.*$//g
;;
"eth2")
ifconfig eth2 | grep 'inet ' | sed s/^.*addr://g | sed s/Bcast.*$//g
;;
*)
echo "请输入正确的内容!"
exit 1
;;
esac
运行结果:
总结:
其实,这SHELL作为第一个版本,可以改进的地方还有很多的,例如:
1、输入HELP可以直接帮助用户进行获取用户的设备。
2、输入无论eth0、eth1、eth2…可以利用正则过滤判断是否输入正确内容,不至于用太多case导致case太臃肿。
3、甚至,既然能实现1的改进基础上,可以实现全自动,不需要用户输入任何内容,自动获取用户设备并且进行查询IP。
还有更多的改进,希望读者能踊跃提出来,大家共同学习哈!