实验4 SHELL脚本的编写(一)

更新时间:2023-10-10 08:47:01 阅读量: 综合文库 文档下载

说明:文章内容仅供预览,部分内容可能不全。下载后的文档,内容与下面显示的完全一致。下载之前请确认下面内容是否您想要的,是否完整无缺。

广东技术师范学院实验报告

学院: 姓名: 实验地点: 预习情况 实验 4 项目名称: SHELL脚本的编写(一) 计科院

专业: 学号:

实验日期:

操作情况

班级: 组别:

组员: 指导教师签名:

成绩:

考勤情况 数据处理情况 1、 实验目的

通过对典型的SHELL脚本进行验证,以及编写具有一定实用程度的SHELL

脚本,理解并掌握SHELL脚本的基本编写方法。

2、实验内容

2.1什么是shell脚本 要明白什么是shell脚本,首先要理解什么是脚本(script)。脚本是指一种未经编译而直接解释执行的程序,最典型例子就是javascript程序。我们知道,程序代码写好后,有两种方式让它执行。一是通过编译器编译成二进制执行代码后提交给系统执行,而另一种则不经过编译,直接送给解释器解释执行。

shell脚本指的就是一种通过shell来解释并执行的程序。UNIX中的shell,它既是一个界面程序,又是一个脚本的解释器,同时又能提供一种功能丰富的脚本语言供用户编写脚本程序。用户只需要通过vi等编辑器将脚本编写好(脚本本身上还是一个文本),通过命令行的形式提交给shell,shell便会对其解释并执行了。

2.2 shell脚本与系统管理 Shell脚本在系统管理上占有重要的位置。原因在于系统管理的日常工作许多都是常规化的,例如日志管理、重要数据备份、账户管理、文件系统清理等工作,一次性地编写一个管理脚本程序,就能避免重复的管理工作。当然,现在有许多管理工具供管理员使用,不是任何工作都需要编写一个shell脚本。不过任何一个管理工具都不可能为特定某个应用业务度身定制,针对当前应用业务的需要编写shell脚本属于高级系统管理员应具备的能力。 此外,有一个问题值得讨论,利用其它高级语言也一样可以写管理程序,为什么要用shell脚本语言?这在于shell脚本最终提交给shell解释执行,因此可直接在程序中使用各种shell命令(c程序是不可能这样做的)。这些shell命令从操作系统管理的角度来看,都涉及到系统资源申请、使用和释放,shell脚本只通过简单的命令即可实现,而高级语言却需要复杂的、大量的系统API函数调用。同学们回顾之前实验中的作业题,每一题只需一到两条shell命令即可完成,但如果用c语言编写相应的程序,也许不可能几条语句就可以实现的了。 关于shell脚本的编写是一个很大的话题,本实验介绍基本的shell程序编写,

通过对shell脚本编写的初步学习,理解系统管理中脚本的作用,掌握一些基本的脚本编写方法。以下所给例子均在bash下运行和测试过。

2.3 创建和执行shell脚本 我们通过建立一个“hello world”程序来认识shell脚本是如何创建和执行的。以下是“hello world”的shell脚本程序的内容,请用vi编辑器录入并将其保存为hello文件。

#!/bin/sh

echo hello world !! 然后按如下方式执行程序并得出相应结果:

# chmod +x hello #./hello

hello world !! 关于shell脚本创建和运行的几点说明:

(1)在bash中,每一个脚本的开头,必须有:#! /bin/sh (2)必须将脚本文件设置为可执行,即

# chmod +x myprogram 或者,使用如下方式执行shell脚本:

# . myprogram

(3)如果shell脚本所放置的目录并不在当前所查找的路径中,可把这个目录名添加到查找路径中,那么就可以命令的形式执行该脚本。系统默认的查找路径可通过如下命令获得并修改:

# echo $PATH

/usr/linux/bin:/usr/bin:/etc:/usr/sbin:/usr/ucb:/usr/bin/X11:/sbin:/usr/java14/jre/bin:/usr/java14/bin

2.4 shell脚本的变量 如之前所述,shell脚本主要用在系统管理方面,shell脚本语言往往并不强调数学运算等功能,因此shell脚本的变量的类型和使用的形式比较单一。 (1) 变量的类型

shell中有三种变量:

? 环境变量:系统环境的一部分,通常不必去定义。个别如PATH变量可

以修改。

? 内部变量:由系统提供,不可修改。

? 用户变量:在编写shell脚本时所定义的,可在脚本内修改和使用。 环境变量是指UNIX为用户配置系统而提供的一些基本变量。环境变量有许多,但一般来说如下一些环境变量比较常用:PATH(命令搜索路径)、ENV(启动脚本的路径名)、PS1(命令行提示符)、SHELL(当前系统使用的shell类型)、HOME(用户登录主目录)。用户可改动这些环境变量来实现定制系统环境的目的,最常见的有改动命令行提示符,以下是一个相关例子,同学们可在Linux系统下做这个实验。

#PS1=’$LOGNAME@$myhost $PWD \\$ ’

内部变量是指shell的一些预定义变量,提供给用户在程序运行时做判断和使用。常用的内部变量有:$1-$9(脚本命令行参数)、$0(脚本名)、$#(命令行参数个数)、$?(上一个命令的返回值)、$*(所有命令行参数)、$$(脚本的进程号)等。请运行以下脚本例子,并将结果以截图形式附于例子后。

例子:内部变量$#、$0、$*,可对脚本改动,查看其他内部变量的值。 #!/bin/sh

#my test program

echo \echo \

echo \

例子:内部变量的使用。注意在脚本运行时要分为两种情况:给定参数和不给定参数(为什么?)。 #!/bin/sh

#name display program if [ $# -eq 0 ] then

echo \else

echo \fi

用户变量是指由用户在编写脚本时定义的变量。变量可定义为整型或字符串,也可设定常量以及构建数组。但由于脚本语言主要用来编写系统管理的程序。因此shell编程语言实际不需要定义变量类型而直接使用。同一个变量既可以用来存放整型值,也可以存放字符和字符串,也可以交替存放不同类型的数值。下面结合变量的赋值和访问来介绍用户变量的使用。

(2) 变量的赋值和访问

在shell中变量可直接使用而定义其类型。如: count=0

myname=jack

filename=‘today backup’

注意变量赋值时“=”左右没有空格。变量使用在脚本编程中,可以直接在shell的命令行中输入,如果要对访问变量的值,则通过“$”标识,如果需要让其成为全局变量,可用export命令输出,则在其他脚本上可使用该变量。请运行以下脚本例子,并将结果以截图形式附于例子后。

例子:在命令行中定义一个变量,并将其输出为全局变量,然后在hello脚本中对其访问,注意如果变量xxx和yyy的值的差异。

#xxx=121 #yyy=212 #export xxx 编写脚本并观察输出结果: #!/bin/sh

echo hello world !! echo xxx=$xxx echo yyy=$yyy

2.5 shell脚本的特殊符号 (1) 引号

在shell中引号分为三种:双引号,单引号和反引号。当一个字符串中嵌入了空格时,双引号能让Shell对该字符串以一个整体来解释,否则Shell将会分别作为命令处理而出错。请运行以下脚本例子,并将结果以截图形式附于例子后。 例子:双引号的使用。注意变量在双引号中同样能被访问。 #!/bin/sh

var=\

newvar=\echo $newvar

value of var is test string

由单引号括起来的字符都作为普通字符出现。特殊字符用单引号括起来以后,也会失去原有意义,而只作为普通字符解释。这样做能够阻止Shell解释一个变量。请运行以下脚本例子,并将结果以截图形式附于例子后。 例子:单引号的使用。

#!/bin/sh

var = ‘test string’

newvar = ‘value of var is $var’ echo $newvar

反引号‘`’:反引号能告诉Shell执行由反引号所定义的字符串(实质为一命令行)。当需要把执行命令的结果存放在一个变量中时,就可以在Shell程序中使用反引号。请运行以下脚本例子,并将结果以截图形式附于例子后。 例子:反引号的使用。

#!/bin/sh

string=”current directory is `pwd`” echo $string

(2) 反斜杠

反斜杠‘\\’:能够阻止shell把后面的字符解释为特殊字符。如: #var=\\$test #echo $var

(3) 注释符

在shell编程中经常要对某些正文行进行注释,以增加程序的可读性。在Shell中以字符“#”开头的正文行表示注释行。在本实验教材中所有例子的命令行以“#”表示,注意与解释符区分开来。

作业:

(1) 将第2节实验内容中标注为例子的shell脚本代码执行并将运行的截图附

于每个例子之后。

(2) 编写一个脚本,显示当前日期及工作目录,并列出有多少个用户在系统上

工作。

(3) 编写脚本接受用户的输入参数,如果用户所给参数个数为1个则将该参数

记录在文件record中,否则在屏幕上输出错误提示信息。

(4) 定义两个公共变量x,y并对其赋值。编写一个脚本,实现x,y的值交换,

在屏幕上输出x,y交换值前后的结果。

在shell编程中经常要对某些正文行进行注释,以增加程序的可读性。在Shell中以字符“#”开头的正文行表示注释行。在本实验教材中所有例子的命令行以“#”表示,注意与解释符区分开来。

作业:

(1) 将第2节实验内容中标注为例子的shell脚本代码执行并将运行的截图附

于每个例子之后。

(2) 编写一个脚本,显示当前日期及工作目录,并列出有多少个用户在系统上

工作。

(3) 编写脚本接受用户的输入参数,如果用户所给参数个数为1个则将该参数

记录在文件record中,否则在屏幕上输出错误提示信息。

(4) 定义两个公共变量x,y并对其赋值。编写一个脚本,实现x,y的值交换,

在屏幕上输出x,y交换值前后的结果。

本文来源:https://www.bwwdw.com/article/nh0f.html

Top