实训五 Linux shell编程
【实习目的】
掌握Linux shell的基本编程,包括:编程、调试与应用
【实习指导】
linux命令及shell编写
一、shell编程简介
Linux shell是一个命令解释器,用来接受并执行命令(包括运行批处理文件和执行程序)。shell环绕在内核的外层,它是Linux操作系统和用户之间的界面。当用户从shell或其他程序向Linux传递命令,内核会做出相应的反应。
这里,将介绍Linux下最常用的shell ——bash。bash(Bourne Again Shell)是大多数Linux发行套件的缺省shell,并被大多数用户所使用。
在命令行输入命令时,每次输入一个命令,就可得到系统的响应。但如果经常要依次执行同一组命令,就可以利用shell程序来实现。shell程序是放在一个文件中的一系列的Linux 命令。执行shell程序时,由Linux逐条解释和执行每个命令。
二、shell程序文件
shell程序文件是一个特殊的文本文件,其内容包含一系列可在shell提示符下执行的命令,以及shell提供的专用的命令和控制语句。Linux提供的shell命令可通过命令help来获得,在shell提示符下,键入命令“help | more”,图5-1所示是获得所有shell命令的列表的一部分。
图5-1
如要获得其中命令echo的详细帮助信息,则在shell提示符下,键入命令“help echo”,便获得该命令的详细使用信息如图5-2所示。
图5-2
图中可观察到,该命令的功能是在屏幕上输出给定的信息。
shell程序文件的运行过程是将shell程序文件中的命令依次执行。
三、shell程序的建立
shell程序文件可用任何一个文件编辑器(如vi)来建立。
例如,建立shell程序shex1,存放在当前目录下(假定当前目录为/root),程序功能为先清屏,然后显示98年的1、2、3月份的月历。程序文件内容如下:clear
cal    1 98
cal    2 98
cal    3 98
用vi编辑器建立shell程序文件shex1的方法如下:
(1)键入命令“vi shex1”,启动vi;
(2)按命令“i”,进入vi的插入状态;
(3)输入程序文件内容;
(4)按<Esc>键,再键入“:”,切换到vi的命令状态;
(5)最后键入命令“wq”,保存文件内容后,退出vi。
至此,shell程序文件shex1已建立。
四、shell程序的运行
运行shell程序有两种方法:一种是在shell环境下,将shell 程序文件作为子shell程序被调用执行;另一种是将shell程序文件视作命令来执行(因此,shell程序文件可以看作是将各种命令组合在一起而形成的新命令),此时必须赋予shell程序文件执行权限。
方法一:sh <shell程序文件名> [<;参数1> <;参数2> ……]
方法二:<shell程序文件名> [<;参数1> <;参数2> ……]
【例如】分别用两种方法运行已建立的shell程序文件shex1。
方法一:
在shell提示符下,键入命令:“sh shex1”。
方法二:
(1)首先,给shell程序文件shex1赋予可执行权限,则在shell提示符下,键入命令:“chmod a+x shex1”;
(2)然后,在shell 提示符下,键入命令“/root/shex1”便可执行该shex1程序,如同其他shell命令一样。
两种方法的运行结果,如图5-3所示。
图5-3
运行命令中有[参数]和没有[参数]的情况分别称为带参数的运行命令和不带参数的运行命令。在shell程序中可使用的形参为$0、$1、$2、……$9,当程序运行时,<;参数1> <;参数2> ……依次赋值给$1、$2、……,通常称运行命令中所带的参数为实参。
$0是一个特殊的形参,其值规定为当前运行的shell程序命令本身。
由于形参个数有限,当参数较多时,可通过命令shift来移动形参与实参的对应关系,执行一次shift后,$1、$2、……变为依次与<;参数2> <;参数3>……对应,再执行一次shift 后,$1、$2、……变为依次与<;参数3> <;参数4>……对应,依此类推。通过下面的例子shell程序shex2,可观察参数的移动变化。
shex2程序文件内容如下:
echo $0 $1 $2
shift
echo $0 $1 $2
运行的命令所带参数及运行结果如图5-4所示。
图5-4
图中可观察到,$0的值始终是当前运行的shell程序命令本身,即/root/shex2。
例如,将shex1程序用参数形式进行改写,程序功能保持不变,最后将程序保存为shex3,存放在当前目录下。
shex3程序文件内容如下:
clear
cal $1 98
cal $2 98
cal $3 98
运行的命令所带参数及运行结果分别如图5-5所示。
图5-5
当带参数的运行命令为“/root/shex3    1 2 3”,则运行结果显示如图4-6所示。注意,当实参为空时,形参将被传递空值。
五、变量
Linux 的shell程序中允许使用各种类型的变量,主要有系统、内部和用户变量三种。
系统变量也称环境变量,它与用户变量的区别在于它可将值传给shell运行的其他命令或shell程序使用,亦即系统变量是全局变量。
内部变量是由系统提供,与环境变量不同,用户不能修改
用户变量由用户定义的变量,是当前shell的局部变量,不能被shell运行的其他命令或shell程序使用,亦即用户在shell程序中定义的程序变量只在程序运行时有效,一旦退出,这些变量自动失效。
通过shell提供的命令set,可以查看当前shell下定义的一系列变量及其值。例如,在shell提示符下,键入命令“set | more”,显示当前shell下定义的变量及其值如图5-6所示。
图5-6
1、变量赋值
格式:<;变量名> =<;字符串>
功能:将等号右边的字符串赋给等号左边的变量,即右边的字符串为左边变量的值。
说明,任何不含空格的字符串都可作变量名。若字符串中含有空格,则在字符串上加上引号。
例如,要求定义一个用户变量name1,并给变量赋值为“MARY”,则在shell提示符下,键入命令“name1=MARY”。
例如,要求定义一个用户变量name2并给变量赋值为“X Window”,则在shell提示符下,键入命令“name2="X Window"”。

版权声明:本站内容均来自互联网,仅供演示用,请勿用于商业和其他非法用途。如果侵犯了您的权益请与我们联系QQ:729038198,我们将在24小时内删除。