shell编程内核源码Word文件下载.docx

上传人:b****6 文档编号:19682458 上传时间:2023-01-08 格式:DOCX 页数:29 大小:206.90KB
下载 相关 举报
shell编程内核源码Word文件下载.docx_第1页
第1页 / 共29页
shell编程内核源码Word文件下载.docx_第2页
第2页 / 共29页
shell编程内核源码Word文件下载.docx_第3页
第3页 / 共29页
shell编程内核源码Word文件下载.docx_第4页
第4页 / 共29页
shell编程内核源码Word文件下载.docx_第5页
第5页 / 共29页
点击查看更多>>
下载资源
资源描述

shell编程内核源码Word文件下载.docx

《shell编程内核源码Word文件下载.docx》由会员分享,可在线阅读,更多相关《shell编程内核源码Word文件下载.docx(29页珍藏版)》请在冰豆网上搜索。

shell编程内核源码Word文件下载.docx

1RestoreArchive"

#菜单选项1存储归档文件

2Backupdirectory"

#菜单选项2备份目录

3Unloaddirectory"

#菜单选项3卸载目录

4Quit"

#菜单选项4停止

#读取用户选择

echo-n"

EnterChoice:

"

#输出提示EnterChoice:

不换行

readCHOICE#读取输入到CHOICE变量

case$CHOICEin#case语句开始

[1-3])echo#若CHOICE变量值为1、2或3则执行下面语句

#读取和验证目录

echo-n"

Whatdirectorydoyouwant?

#输出Whatdirectorydoyouwant?

不换行

readWORKDIR#读取工作目录到WORKDIR变量

if[!

-d"

$WORKDIR"

]#若WORKDIR不是一个目录

then#则输出如下提示

echo"

Sorry,$WORKDIRisnotadirectory"

#WORKDID(替换成对应值)isnotadirectory

continue#进入下一轮测试

fi#if语句结束

cd$WORKDIR;

;

#使上面指定的目录成为当前工作目录

4):

#:

为空语句,不执行任何动作

*)echo"

Sorry,$CHOICEisnotavalidchoice"

#默认执行语句,输出SorryCHOICE(替换成对应值)isnotavalidchoice

continue#进行下一轮测试

esac#结束case

case"

$CHOICE"

in#case语句开始

1)echo"

Restoring..."

#若CHOICE的值与1匹配,输出Restoring...

cpio-i<

/dev/rmt/0h;

#将/dev/rmt/Oh中的数据保存到系统当中

2)echo"

Archiving..."

#若CHOICE的值与2匹配,输出Archiving...

ls|cpio-o>

#使用管道将ls的输出作为cpio的输入备份到/dev/rmt/Oh中

3)echo"

Unloading..."

#若CHOICE的值与3匹配,输出Unloading...

4)echo"

Quitting"

#若CHOICE的值与4匹配,输出Quitting...

break;

#跳出case

#检查cpio错误

if[$?

-ne0]#若命令执行后的返回值不为零,则发生操作错误

then#

echo"

Aproblemhasoccurredduringtheprocess"

#输出错误提示Aproblemhasoccuredduringtheprocess

if[$CHOICE=3]#若CHOICE的值等于3

then#

Thedirectorywillnotbeerased"

#则输出出提示Thedirectorywillnotbeerased

fi#结束if

Pleasecheckthedeviceandtryagain"

#输出提示Pleasecheckthedeviceandtryagain

continue#继续下一轮测试

else#如果操作没有发生错误

if[$CHOICE=3]#如CHOICE的值等于3

rm*#则卸载的掉CHOICE中指定的所有目录

fi#结束if-else

done#结束do

2、此Shell程序主要实现查看/bin/rmp目录下的相关内容

/bin/sh指定用bin目录下的sh解释执行以下命令

#本shell程序实现的功能是根据用户输入列出RPM下所有文档、文件或包的相关信息

#日期:

#文件名:

sh1

RPM=/bin/rpm#将/bin/rmp赋值给变量PMP

option="

-q"

#将字符串"

赋值给变量option

whiletrue#while循环

whattoquery?

"

#输出提示语句whattoquery?

selectvarin"

All"

file"

packagename"

#将"

之一存入变量var

do#do语句开始

case$varin

All)#如果变量var值为ALL,则执行下面语句

option=$option"

a"

追加到option变量后面

break#跳出case

;

#语句结束

file)#如果变量var值为file,则执行下面语句

pleaseinputfilename:

#输出提示pleaseinputfilename:

f"

追加到变量option后面

readargument#将输入读到变量argument中

packagename)#如果var变量值与packagename匹配,则执行下面语句

pleaseinputpackagename:

#输出pleaseinputpackagename:

readargument#读取输入到参数argument中

*)#默认语句

pleasechoosebetween1-3"

#输出pleasechoosebetween1-3

esac#case结束

done#done结束do

whatdoyouwanttoknow?

#输出whatdoyouwanttoknow?

location"

info"

case$varin#case语句开始

location)#如果var值与location位置匹配,则执行下列语句

l"

追加到option末尾

info)#如果var的值与info匹配,则执行下面语句

i"

#将'

i'

追加到option后面

packagename)#如果packagename与var的值匹配,则执行下面语句

*)#默认执行语句

#输出pleasechoosebetween1-3

esac#case语句结束

done#do语句结束

${RPM}$option$argument#引用变量RPM、option、argument

continue?

[yes/no]"

#输出提示continue?

[yes/no]

readanswer#读取输入到变量anser

if[answer="

no"

]#如果anwer的值为"

break#则跳出循环

fi#if语句结束

done#结束whiledo

二、Linux操作系统配置实例(20分)

1、DHCP服务的安装与配置

DHCP服务的安装

RedHatEnterpriseLinux安装程序默认没有安装DHCP

服务,使用下面的命令可以检查系统是否已经安装了

DHCP服务或查看已经安装了何种版本。

rpm-qdhcp

如果系统还没有安装DHCP服务。

如果现在需要安装,

可将RedHatEnterpriseLinux5的第3张安装盘放入光驱,

加载光驱后在光盘的Server目录下找到DHCP服务的RPM

安装包文件dhcp-3.0.5-3.el5.i386.rpm,然后使用下面的命

令安装DHCP服务。

rpm-ivh/mnt/Server/dhcp-3.0.5-3.el5.i386.rpm

DHCP配置文件dhcpd.conf的格式

选项/参数#这些选项/参数全局有效

声明{

选项/参数#这些选项/参数局部有效

}

dhcpd.conf文件中常用的声明及功能

声明

功能

shared-network名称{…}

定义超级作用域

subnet网络号netmask子网掩码{…}

定义作用域(或IP子网)

range起始IP地址终止IP地址

定义作用域(或IP子网)范围

host主机名{…}

定义保留地址

group{…}

定义一组参数

dhcpd.conf文件中常用的参数及功能

参数

ddns-update-style类型

定义所支持的DNS动态更新类型(必选)

allow/ignoreclient-updates

允许/忽略客户机更新DNS记录

default-lease-time数字

指定默认的租约期限

max-lease-time数字

指定最大租约期限

hardware硬件类型MAC地址

指定网卡接口类型和MAC地址

server-name主机名

通知DHCP客户机服务器的主机名

fixed-addressIP地址

分配给客户端一个固定的IP地址

dhcpd.conf文件中常用的选项及功能

选项

subnet-mask子网掩码

为客户端指定子网掩码

domain-name“域名”

为客户端指定DNS域名

domain-name-serversIP地址

为客户端指定DNS服务器的IP地址

host-name“主机名”

为客户端指定主机名

routersIP地址

为客户端指定默认网关

broadcast-address广播地址

为客户端指定广播地址

netbios-name-serversIP地址

为客户端指定WINS服务器的IP地址

netbios-node-type节点类型

为客户端指定节点类型

ntp-serverIP地址

为客户端指定网络时间服务器的IP地址

nis-serversIP地址

为客户端指定NIS域服务器的地址

nis-domain“名称”

为客户端指定所属的NIS域的名称

time-offset偏移差

为客户端指定与格林尼治时间的偏移差

配置文件实例

DHCP服务的配置文件dhcpd.conf的内容如下:

ddns-update-styleinterim;

ignoreclient-updates;

subnet192.168.16.0netmask255.255.255.0{

range192.168.16.11192.168.16.100;

optionrouters192.168.16.1;

optionsubnet-mask255.255.255.0;

optiondomain-name"

optiondomain-name-servers192.168.16.2,61.144.56.100;

optionbroadcast-address192.168.16.255;

default-lease-time86400;

max-lease-time172800;

hostpc1{

hardwareethernet00:

a0:

cc:

cf:

9c:

14;

fixed-address192.168.16.20;

}

hostpc2{

hardwareethernet04:

20:

c1:

f8:

37:

11;

fixed-address192.168.16.30;

设置IP作用域

IP作用域是一个IP子网中所有可分配的IP地址的连续范围。

在DHCP服务器内必须设置一个IP作用域。

当DHCP客户端向DHCP服务器请求IP地址时,DHCP服务器就可以从该作用域内选择一个尚未分配的IP地址,并将其分配给该DHCP客户端。

在dhcpd.conf文件中,可用subnet语句来声明一个IP作用域。

subnet语句的格式如下:

subnet子网IDnetmask子网掩码{

range起始IP地址结束IP地址;

#指定可分配给客户端的IP地址范围

IP参数;

#定义客户端的IP参数,如子网掩码、默认网关等

设置客户端的IP选项

除了给DHCP客户端指定IP地址外,还可以利用DHCP服务器来设置客户端的工作环境。

例如,可以设置其子网掩码、DNS服务器的地址和默认网

关等。

当DHCP客户端向DHCP服务器索取IP地址或更新租约时,DHCP服务器就会自动为DHCP客户端设置这些IP选项。

在配置文件dhcpd.conf中,设置DHCP客户端IP选项的语句的基本格式为:

option选项代码设置内容;

设置租约期限

租约期限是在DHCP服务器上指定的时间长度,在这个时间范围内DHCP客户端可以临时使用从DHCP服务器租借到的IP地址。

在dhcpd.conf文件中,有下面两个与租约期限有关的设置。

1.默认的租约期限default-lease-time

2.最大租约期限max-lease-time

保留特定的IP地址

可以保留特定的IP地址给指定的DHCP客户端使用,也就是说,当这个客户端每次向DHCP服务器索取IP地址或更新租约时,DHCP服务器都会给该客户端分配相同的IP地址。

要保留特定的IP地址给指定的DHCP客户端使用,可先用arp命令查出该客户端网卡的MAC地址;

然后在/etc/dhcpd.conf文件中,加入如下格式的host语句。

host主机名{

hardwareethernet网卡的MAC地址;

#指定DHCP客户端网卡的MAC地址

fixed-addressIP地址;

#指定为该DHCP客户端分配的IP地址

IP参数;

#指定默认网关等其他IP参数

分配多网段的IP地址

如果在一个规模比较大的物理网络中存在多个IP子网,而多个IP子网的主机都需要DHCP服务器来提供地址配置信息,那么可以采用的一种方法是:

在每一个IP子网中都装一台DHCP服务器,让它们分别为各个子网分配IP地址。

但是,从节约成本的角度出发,一般情况下都不这样做,而是采用在一个子网中安装DHCP服务器并让它来为多个子网分配IP地址的方法。

那么如何才能使该DHCP服务器向多个网段提供动态IP分配服务呢?

这时可以考虑使用DHCP中继代理功能。

DHCP中继代理(dhcrelay)允许将无DHCP服务器的子网内的DHCP客户请求转发给其他子网内的一个或多个DHCP服务器。

一个或多个DHCP服务器。

在DHCP服务器上设置超级作用域,修改DHCP服务器(192.168.16.177)上的dhcpd.conf文件,加入如下格式的shared-network语句。

shared-network名称{

subnet子网1的网络IDnetmask子网掩码{…}

subnet子网2的网络IDnetmask子网掩码{…}}

2.设置DHCP中继代理

#Commandlineoptionshere

INTERFACES="

eth1eth2"

DHCPSERVERS="

192.168.16.177"

启动和停止DHCP服务

1.启动DHCP服务

/etc/init.d/dhcpdstart

2.停止DHCP服务

/etc/init.d/dhcpdstop

3.重新启动DHCP服务

/etc/init.d/dhcpdrestart

4.设置自动启动DHCP服务

如果需要让DHCP服务随系统启动而自动加载,可以执行“ntsysv”命

令启动服务配置程序,找到“dhcpd”服务,在其前面加上“*”星号,然后

选择“确定”即可,

Linux中DHCP客户端的配置

①直接编辑文件/etc/sysconfig/network-scripts/ifcfg-eth0,找到语句“BOOTPROTO=none”,将其改为“BOOTPROTO=dhcp”即可。

②重新启动网卡

ifdowneth0;

ifupeth0

ifconfigeth0down;

ifconfigeth0up

三、Linux操作系统应用开发实例(20分)

1、简单ping程序实现源码

//pingapp.c简单ping程序实现

/////////////////////////////////////////////////////////////////////

#include<

stdio.h>

stdlib.h>

string.h>

//字符串头文件

sys/socket.h>

//socket头文件

netinet/in.h>

arpa/inet.h>

//ARP相关头文件

unistd.h>

sys/types.h>

//一些结构体相关头文件

netinet/ip_icmp.h>

//IP、ICMP相关头文件

#defineWAIT_TIME3//等待时间

#defineBUFFER_SIZE1024//缓冲区大小

u_shortcal_cksum(constu_short*addr,registerintlen,u_shortcsum)

{

registerintnleft=len;

constu_short*w=addr;

registeru_shortanswer;

registerintsum=csum;

/**使用32位累加器实现校验码的计算

*联系对16位数进行累加,最后将高16位与低16位进行累加

*/

while(nleft>

1){

sum+=*w++;

nleft-=2;

}

/*如果最后剩余8位,补齐到16位(补零,同时注意网络字节与

主机字节间的转换)*/

if(nleft==1)

sum+=htons(*(u_char*)w<

<

8);

/**将高低16位相加,以消除累加时进位问题*/

sum=(sum>

>

16)+(sum&

0xffff);

/*高低16位相加*/

sum+=(sum>

16);

/*消除高低位相加的进位问题*/

answer=~sum;

/*取反*/

return(answer);

//ICMP报头解析代码

intunpack_packet_header(char*buf,intlen,structsockaddr_in*from)

{inti,iphdrlen;

structip*ip;

structicmp*icmp;

structtimeval*tvsend;

structtimevaltvrecv;

doublertt;

ip=(structip*)buf;

//ip报头长度=ip_hl*4

iphdrlen=ip->

ip_hl*4;

//得到ICMP报文信息

icmp=(structicmp*)(buf+iphdrlen);

//icmp报文总长度

len-=iphdrlen;

//如果长度小于要求,退出程序

if(len<

8){

printf("

ICMPpackets\'

slengthislessthan8

展开阅读全文
相关资源
猜你喜欢
相关搜索

当前位置:首页 > 医药卫生 > 临床医学

copyright@ 2008-2022 冰豆网网站版权所有

经营许可证编号:鄂ICP备2022015515号-1