3-30 7 views
知识点
- egrep:shell中grep的正则表达式版,执行效果同grep -E(-E:是grep的ERE正则类型,除此外还有默认的BRE和-P的PRE)相似,只是egrep对特殊字符不需要转义更加规范。
- awk:指定分隔符格式化输出;awk是一种高级的编程语言,但在linux下更多是在命令行中和脚本中使用。
- sed:字符串替换,格式化输出;sed同awk类似,只是在列的处理上没有awk方便,sed更偏向于行的处理。
- while:死循环,当有输入错误或没有输入字符时,提示继续输入,直到输入正确为止。
- continue:当输入不正确时再循环一次。
- break:输入正确时退出循环。
脚本
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 |
#!/bin/bash #Author: Eric Winn #Email: eng.eric.winn@gmail.com ip addr |egrep '^[1-9]+:' |awk -F ':' '{print $1,$2}' >/tmp/list.txt while true do read -p "请输入网上名(本机网卡有`cat /tmp/list.txt|awk '{print $2}' |xargs | sed 's/ /,/g'`:)" dev if [ -n "$dev" ] then if grep -qw "$dev" /tmp/list.txt then break else echo "输入的网卡名字不对。" continue fi else echo "你没有输入任何东西" continue fi done main() { n1=`grep -w "$1" /tmp/list.txt |awk '{print $1}'` n2=$[$n1+1] line1=`ip addr |grep -wn "$1:" |awk -F ':' '{print $1}'` line2=`ip addr |grep -n "^$n2:"|awk -F ':' '{print $1}'` if [ -z "$line2" ] then ip addr |sed -n "$line1,$"p |grep 'inet ' | awk -F ' +|/' '{print $3}' else ip addr |sed -n "$line1,$line2"p |grep 'inet ' |awk -F ' +|/' '{print $3}' fi } myip=`main $dev` if [ -z "$myip" ] then echo "网卡$dev没有设置IP地址。" else echo "网卡$dev,IP地址是:" echo "$myip" fi |
执行结果
这个执行结果对我们来讲并没有什么意义,重点在于对文本的处理上
1 2 3 4 5 6 7 8 |
[eric@localhost~]$ sh tell_me_my_ip.sh 请输入网上名(本机网卡有lo,eth0:)lo 网卡lo,IP地址是: 127.0.0.1 [eric@localhost~]$ sh tell_me_my_ip.sh 请输入网上名(本机网卡有lo,eth0:)eth0 网卡eth0,IP地址是: 172.16.208.243 |
如果想赏钱,可以用微信扫描下面的二维码,一来能刺激我写博客的欲望,二来好维护云主机的费用; 另外再次标注博客原地址 itnotebooks.com 感谢!
