实验4 SHELL脚本的编写(一)
- 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
- 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
- 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。
广东技术师范学院实验报告
学院:计科院专业:班级:成绩:
姓名:学号:组别:组员:
实验地点:实验日期:指导教师签名:
实验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中有三种变量:
●环境变量:系统环境的一部分,通常不必去定义。个别如PA TH变量可
以修改。
●内部变量:由系统提供,不可修改。
●用户变量:在编写shell脚本时所定义的,可在脚本内修改和使用。
环境变量是指UNIX为用户配置系统而提供的一些基本变量。环境变量有许多,但一般来说如下一些环境变量比较常用:PATH(命令搜索路径)、ENV(启动脚本的路径名)、PS1(命令行提示符)、SHELL(当前系统使用的shell类型)、HOME(用户登录主目录)。用户可改动这些环境变量来实现定制系统环境的目的,最常见的有改动命令行提示符,以下是一个相关例子,同学们可在Linux系统下做这个实验。
#PS1=’$LOGNAME@$myhost $PWD \$ ’
内部变量是指shell的一些预定义变量,提供给用户在程序运行时做判断和使用。常用的内部变量有:$1-$9(脚本命令行参数)、$0(脚本名)、$#(命令行参数个数)、$?(上一个命令的返回值)、$*(所有命令行参数)、$$(脚本的进程号)等。请运行以下脚本例子,并将结果以截图形式附于例子后。
例子:内部变量$#、$0、$*,可对脚本改动,查看其他内部变量的值。
#!/bin/sh
#my test program
echo "number of parameters is "$#
echo "program name is "$0
echo "parameters as a single string is "$*
例子:内部变量的使用。注意在脚本运行时要分为两种情况:给定参数和不给定参数(为什么?)。
#!/bin/sh
#name display program
if [ $# -eq 0 ]
then
echo "name not provided"
else
echo "your name is "$1
fi
用户变量是指由用户在编写脚本时定义的变量。变量可定义为整型或字符串,也可设定常量以及构建数组。但由于脚本语言主要用来编写系统管理的程序。因此shell编程语言实际不需要定义变量类型而直接使用。同一个变量既可以用来存放整型值,也可以存放字符和字符串,也可以交替存放不同类型的数值。下面结合变量的赋值和访问来介绍用户变量的使用。