Linux学习之路6.docx
《Linux学习之路6.docx》由会员分享,可在线阅读,更多相关《Linux学习之路6.docx(22页珍藏版)》请在冰点文库上搜索。
Linux学习之路6
Linux学习之路6(2011-07-2816:
01)
标签:
Linux网络属性配置 case分支流程 字体控制及添加颜色 脚本 完全匹配IP的应用 分类:
LINUX学习之路
由于这俩天身体不舒服白天上完课后,回来很早就睡了,所以对这俩天学的东西没有总结!
我们一天学习的内容是相当多的,不总结回头就忘了!
所以还是赶紧看看这俩天都学了什么吧!
我哭啊!
忙中出错!
刚点错了忘记保存了又得从头写!
!
!
这次可能就没上次写的那么详细了!
第6讲的主要内容有:
1.在命令行怎样为echo语句添加颜色
2.Linux主机的网络属性配置
3.怎样添加路由
4.case分支流程
5.函数调用
怎么为echo语句添加颜色
ANSI
使用CSIn控制符
如:
echo-e"\033[31mThisisadesk;\033[0m" \033是Esc的16进制表示
一共8种颜色
0黑
1红
2绿
3黄
4蓝色
5紫红色
6cyan)adeepgreenishbluecolour我们就理解为青色
7白色
控制前景色\033[3N \033[0m
控制背景色\033[4N \033[0m
把前景色和背景色设置为相同可以隐藏内容这就不用解释了吧!
字符自身属性的控制字符
0重设为正常字体
1设置为粗体
2faint=slight理解为细体吧!
3斜体
4加下划线
5闪动效果
6快速闪动
7将前景色和背景色调换
8把字体颜色和背景色设置为一样
以上就是如何对脚本添加颜色及字符控制还有就是要给echo语句加颜色的时候必须要加-e
的选项
举个例子看看怎么具体怎么设置如:
1.echo-e"\033[1;31;42mMyColor.\033[0m"
这样就能将字体设置粗体且颜色为红色背景色为绿色了!
Linux主机的网络属性配置:
配置的信息包括:
IP地址,子网掩码,网关,DNS服务器地址等
一共有4种方法:
在图形界面下配置:
使用命令system-config-network-gui&这是redhat专门提供的网络配置窗口
基于字符的图形界面:
使用命令system-config-network-tui或setup
直接修改/etc/sysconfig/nerwork-scripts/ifcfg-ethX对应网卡信息的配置文件
ifconfig命令
下面具体说下这几种方法以及与之相关的一些必备知识!
1.在图形界面下配置
在命令行模式下输入命令system-config-network-gui&就会弹出一个跟widows下差不多的配置窗口
这是redhat专门提供的配置网卡的窗口这个配置比较简单就不详细解释了!
第2种方法在命令行
使用命令system-config-network-tui或setup都会弹出一个命令行的图形界面
setup命令会打开一个类似于windows里控制面板的界面!
这里我们选中第4项就能进入跟输入命令system-config-network-tui相同的弹窗
选中第一项进入可以配置的信息有:
Name设备名
Device设备
UseDHCP是否使用DHCP协议如果选择启用下面的配置将不会生效或不能配置下面的选项
StsticIP静态IP地址
Netmask 子网掩码
DefaultgatewayIP网关
在配置完成后点OK 然后点SAVE即可
很easy吧也不用详细解释了吧!
然后切换到DNS选项上里面可以配置的选项:
Hostname 主机名
PrimaryDNS 主要或首选DNS
SecondaryDNS
TertiaryDNS
Search
这里主要解释下Search选项的意义!
这是当我们在使用ping命令或其他命令去访问某个特定的主机时
后面跟的并非是一个完全合格域名即FQDN格式的域名的时候,就用Search后面给的内容将其补充成一个完全合格的域名,称为搜索域,这里面可以填写多个,它会一个一个的补充搜索!
另外说一点就是填写多个DNS的作用是什么,什么情况下会用到备用DNS,只有当首选DNS服务器坏掉的时候才会启用备用的DNS!
并非是发送个请求首先的解析不道它就会启用第2个或第3个的概念!
希望我说的大家能理解了!
这就是两种最简单的配置方法了,但在Linux系统下并不常用!
下面介绍第三种直接修改配置文件的方法!
我们知道在Linux里一切皆文件,这是Linux的哲学思想之一!
所以对redhat来讲所有的网卡配置文件都保存在/etc/sysconfig/nerwork-scripts目录下
/etc/sysconfig/nerwork-scripts/ifcfg-ethx对应各个网卡的配置文件!
在这个文件中我们能配置的信息有:
DEVICE=eth0
BOOTPROTO=dhcp
DHCPCLASS=
HWADDR=00:
0C:
29:
7F:
A1:
F2
ONBOOT=yes
这里的信息也只说两项吧!
BOOTPROTO这个选项用于配置设备启动时所使用的协议一共有4个选项分别是dhcp,bootp,static,none
其中bootp是dhcp的前身,用于早期无盘工作站的动态地址分配,没有租约的概念!
none和static的意义一样
再说下ONBOOT这个是干嘛的!
这是设置是否在系统启动时启用此设备!
一般设置为yes设置为no时要手动启动此设备!
当我们在这里选择static或none的时候我们将要配置一下几项信息
NETMASK=
IPADDR=
GATEWAY=
TYPE=
这几个也都不用解释了吧!
分别是子网掩码,IP地址,网关,类型!
出了上面的外我么经常还要配置的项
USERCTL=
PEERDNS=
这两项的选项都是yes或noUSERCTL是否允许普通用户来启用或禁用此设备通常设置为no
PEERDNS通常跟BOOTPROTO=dhcp或bootp是结合起来使用这个选项通常设置为no可以阻止dhcp服务协议修改本机的DNS服务器地址的!
说到这里怎么配置DNS呢对应的配置文件是/etc/resolv.conf
这里能指定搜索域上面解释过了还有nameserver服务器名这里只能跟IP地址不能跟主机名!
好了这就是基本的配置方法和基本要配置的信息了!
以上的三种配置方法都必须重启系统或重启网络服务后才能使之生效!
使用servicenetworkrestart或ifdownethx&&ifupethx来重启网络或禁用启用网卡来使配置生效!
第4种ifconfig命令
ifconfig不带选项查看当前处于激活状态的网络设备的信息
-a查看所有包括未激活的
ifconfigethxIP/NETMASK不举例说明了需要说明的一点是NETMASK即子网掩码支持俩种格式的完全的255.255.255.0这种格式或CIDR格式即用长度表示的如24,16等
这种配置完后立即生效临时有效重启网络后失效
ifconfig不能配置DNS和网关等信息,想要配置还得配置上述的配置文件!
怎么配置网关和主机名
配置主机名
/etc/sysconfig/network下有
HOSTNAME的选项可以配置主机名
这个配置重启系统后才会生效
用hostname命令+主机名可以立即生效重启后失效
hostneme命令事实上修改得文件是/proc/sys/kernel/hostname的内容
这个文件的内容不能使用编辑器修改
可以用echo" ">/重定向修改
不带任何选项的hostname能查看当前的主机名
网关在网卡配置的信息文件和/etc/sysconfig/network中都可配置
以网卡配置的信息为主!
以上就是基本的网络属性配置方法和基本选项配置了!
这部分知识会随着学习的深入更加完善的!
下面说下怎么添加路由和case分支流程及函数的相关知识!
怎么添加路由
routeadd-hostIPgwGATEWAY主机路由
routeadd-netNETWORK/NETMASKgwGATEWAY网络路由
如:
routeadd-net0.0.0.0/0.0.0.0gwGATEWAY
roueadddefaultgwGATEWAY 添加默认网关
怎么删除路由信息
routedel-hostIP删除主机路由
routedel-netNETWORK/NETMASK删除网络路由
case分支流程
case$VARin
PATTERN1)
......
;;
PATTERN2)
.....
;;
*)
....
;;
esac
函数 fuction:
功能
定义函数
functionF_NAME{
函数体
}
F_NAME(){
函数体
}
return明确指定返回值 0正确1-255错误
函数跟脚本一样,可以接受参数
这就是第6讲的内容了!
其实今天东西比较少是因为下面这个脚本!
大家可以看下,这是从学习Linux来看的最复杂的脚本了!
1.#!
/bin/bash
2.
3.#
4.
5.FLAG=0
6.
7.TMPFILE=`mktemp/tmp/eth.XXXXXXXX`
8.
9.
10.
11.read-p"Interface:
"ETHCARD
12.
13.
14.
15.ALLECARD=`ifconfig-a|awk'/^[^[:
space:
]l]/{print$1}'`
16.
17.
18.
19.untilecho$ALLECARD|grep"$ETHCARD"&>/dev/null;do
20.
21.echo-e"\033[31mWrongCardname.\033[0m"
22.
23.read-p"Interface:
"ETHCARD
24.
25.done
26.
27.
28.
29.ETHFILE=/etc/sysconfig/network-scripts/ifcfg-$ETHCARD
30.
31.
32.
33.read-p"BootProtocol:
"MYBOOTPROTO
34.
35.untilecho$MYBOOTPROTO|grep-E"dhcp|static"&>/dev/null;do
36.
37.echo-e"\033[31mWrongBOOTPROTO.\033[0m"
38.
39.read-p"BootProtocol:
"MYBOOTPROTO
40.
41.done
42.
43.
44.
45.if["$MYBOOTPROTO"=="dhcp"];then
46.
47.sed-i"s/^BOOTPROTO=.*/BOOTPROTO=dhcp/g"$ETHFILE
48.
49.if[$?
-eq0];then
50.
51.ifdown$ETHCARD&&ifup$ETHCARD
52.
53.[$?
-eq0]&&echo"Set$ETHCARDdone."
54.
55.fi
56.
57.elif["$MYBOOTPROTO"=="static"];then
58.
59.cat$ETHFILE>$TMPFILE
60.
61.read-p"IpAddress:
"MYIP
62.
63.
64.
65.until[[$MYIP=~^([1-9]|[1-9][0-9]|1[0-9]{1,2}|2[01][0-9]|22[0-3])(\.([0-9]|[1-9][0-9]|1[0-9]{2}|2[0-4][0-9]|25[0-4])){2}(\.([1-9]|[1-9][0-9]|1[0-9]{2}|2[0-4][0-9]|25[0-4]))$]];do
66.
67.echo-e"\033[31mWrongIP.\033[0m"
68.
69.read-p"IpAddress:
"MYIP
70.
71.done
72.
73.
74.
75.read-p"Netmask:
"MYNM
76.
77.
78.
79.until[[$MYNM=~^255(\.(0|255)){3}$]];do
80.
81.echo-e"\033[31mWrongNetMask.\033[0m"
82.
83.read-p"Netmask:
"MYNM
84.
85.done
86.
87.
88.
89.read-p"Gateway:
"MYGW
90.
91.
92.
93.forIin{1..4};do
94.
95.[$[`echo$MYIP|cut-d.-f$I`&`echo$MYNM|cut-d.-f$I`]-ne$[`echo$MYGW|cut-d.-f$I`&`echo$MYNM|cut-d.-f$I`]]&&FLAG=1&&break
96.
97.done
98.
99.
100.
101.until[[$MYGW=~^([1-9]|[1-9][0-9]|1[0-9]{1,2}|2[01][0-9]|22[0-3])(\.([0-9]|[1-9][0-9]|1[0-9]{2}|2[0-4][0-9]|25[0-4])){2}(\.([1-9]|[1-9][0-9]|1[0-9]{2}|2[0-4][0-9]|25[0-4]))$]]&&[$FLAG-eq0];do
102.
103.echo-e"\033[31mWrongGateWay.\033[0m"
104.
105.read-p"Gateway:
"MYGW
106.
107.forIin{1..4};do
108.
109.[$[`echo$MYIP|cut-d.-f$I`&`echo$MYNM|cut-d.-f$I`]-ne$[`echo$MYGW|cut-d.-f$I`&`echo$MYNM|cut-d.-f$I`]]&&FLAG=1&&break||FLAG=0
110.
111.done
112.
113.done
114.
115.
116.
117.sed-i"s/^BOOTPROTO=.*/BOOTPROTO=static/g"$TMPFILE
118.
119.grep"^IPADDR="$TMPFILE&>/dev/null&&sed-i"s/IPADDR=.*/IPADDR=$MYIP/"$TMPFILE||echo"IPADDR=$MYIP">>$TMPFILE
120.
121.grep"^NETMASK="$TMPFILE&>/dev/null&&sed-i"s/NETMASK=.*/NETMASK=$MYNM/"$TMPFILE||echo"NETMASK=$MYNM">>$TMPFILE
122.
123.
124.
125.if[-z$MYGW];then
126.
127.sed-i'/^GATEWAY=.*/d'$TMPFILE
128.
129.else
130.
131.grep"^GATEWAY="$TMPFILE&>/dev/null&&sed-i"s/GATEWAY=.*/GATEWAY=$MYGW/"$TMPFILE||echo"GATEWAY=$MYGW">>$TMPFILE
132.
133.fi
134.
135.cp-f$TMPFILE$ETHFILE
136.
137.ifdown$ETHCARD&&ifup$ETHCARD
138.
139.[$?
-eq0]&&echo"Set$ETHCARDdone."
140.
141.else
142.
143.echo"Nosuchoptions."
144.
145.exit1
146.
147.fi
148.
149.
150.
151.rm-f$TMPFILE
稍微说明下这个脚本实现的功能吧!
1。
判断用户输入的设备是否存在是一个正确的设备
2.判断用户输入的BOOTPROT类型及是否是可用的协议并作出相应的后续操作
3.判断用户输入的IP地址是否是一个合法的IP地址子网掩码是否是一个合理的子网掩码这里并不是很严谨
按理说子网掩码的最后一段不能是255这里没完全的严格限制!
4.判断用户输入的网关是否是一个合法的IP地址并判断网关是否跟IP地址在同一个网段内!
还有一些提示信息及相应的操作!
里面涉及了些以前没学过的内容稍微介绍下吧!
一是创建临时文件!
怎样创建临时文件
mktemp/tmp/eth.XXXXXXX
-p
-d生成临时目录
在这里的作用是先将配置信息储存在临时文件里再取覆盖原文件可以防止非正常的退出造成意外!
这里还没有学捕捉信号的方法因此用这种方法做的!
还有一个关键字
break提前跳出循环的,一次跳出一层循环,即在循环嵌套的时候由内向外一次跳出一层循环!
与之对应的还有个continue继续循环!
还有一个FLAG标识这里用作条件的双层限制!
好的基本如此了!
下面将这节课的作业附上3个脚本其实是一个脚本层层递进的关系综合涵盖了以上的内容大家看下吧!
可能写的不好!
有错的地方还请提醒!
1、提示用户可以输入”mem"查看本机物理内存使用信息,"swap"显示虚拟内存使用信息;
2、当用户输入mem时,获取当前主机物理内存的大小,已经使用的空间及空闲空间大小;如果已用空间超出总空间的90%,则以红色字体警告;否则,则以绿色字体显示空间剩余百分比;
3、当用户输入"swap"时,获取当前主机虚拟内存的大小,已经使用的空间及空闲空间的大小;如果已用空间超出总空间的90%,则以红色字体警告;否则,则以绿色字体显示空间剩余百分比;
4、其它信息则说明是错误输入;
#!
/bin/bash
#
read-p"Inputmemtoseetheinformationofmemory;swaptoseetheinformationofswap:
"MS
case$MSin
"mem")
free|awk'/^Mem:
/{print"total:
"$2,"used:
"$3,"free"$4}'
A=`free|awk'/^Mem:
/{print$2}'`
B=`free|awk'/^Mem:
/{print$3}'`
C=$[$B*100/$A]
if[$C-gt90];then
echo-e"\033[31mThememoryhasbeenused"$C"%.\033[0m"
else
echo-e "\033[32mThememoryhasbeenused"$C"%.\033[0m"
fi
;;
"swap")
free|awk'/^Swap:
/{print"total:
"$2,"used:
"$3,"free"$4}'
A=`free|awk'/^Swap:
/{print$2}'`
B=`free|awk'/^Swap:
/{print$3}'`
C=$[$B*100/$A]
if[$C-gt90];then
echo-e"\033[33mThememoryhasbeenused"$C"%.\033[0m"
else
echo-e"\033[32mThememoryhasbeenused"$C"%.\033[0m"
fi
;;
*)
echo"Wrong."
;;
1、用一个函数实现获取当前主机物理内存的大小,已经使用的空间及空闲空间大小;如果已用空间超出总空间的90%,则以红色字体警告;否则,则以绿色字体显示空间剩余百分比;
2、用一个函数实现获取当前主机虚拟内存的大小,已经使用的空间及空闲空间的大小;如果已用空间超出总空间的90%,则以红色字体警告;否则,则以绿色字体显示空间剩余百分比;
3、显示一个提示给用户,说明输入mem可以显示物理内存空间使用情况;输入swap可以显示虚拟内存空间使用情况;其它任意字符提示用户脚本使用方法后退出脚本;
#!
/bin/bash
#
functionMYMEMORY{
free|awk'/^Mem:
/{print"total:
"$2,"used:
"$3,"free"$4}'
A=`free|awk'/^Mem:
/{print$2}'`
B=`free|awk'/^Mem:
/{print$3}'`
C=$[$B*100/$A]
if[$C-gt90];then
echo-e"\033[31mThememoryhasbeenused"$C"%.\033[0m"
else
echo-e "\033[32mThememoryhasbeenused"$C"%.\033[0m"
fi
}
functionMYSWAP{
free|awk'/^Swap:
/{print"total:
"$2,"used:
"$3,"free"$4}'
A=`free|awk'/^Swap:
/{print$2}'`
B=`free|awk'/^Swap:
/{print$3}'`
C=$[$B*100/$A]
if[$C-gt90];then
echo-e"\033[33mThememoryhasbeenused"$C"%.\033[0m"
else
echo-