




已阅读5页,还剩4页未读, 继续免费阅读
版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领
文档简介
Shell编程实验一、实验目的了解 Shell 的作用和主要分类。了解 Bash的一般语法规则。练习编写简单的shell程序。二、实验内容1.Shell变量的定义及其使用。2.位置参数和环境变量。3.Shell中的特殊字符。4.条件判断结构与循环结构5.函数的定义和使用三、预备知识1、LINUX环境下常用命令和VI编辑器的操作。2、了解Shell作用和主要分类等基础知识。四、实验设备及工具软件:PC机操作系统REDHAT ELAS4环境五、实验原理及说明Shell是Linux系统中一个重要的层次,它是用户与系统交互作用的界面。在介绍Linux命令时,Shell都作为命令解释程序出现:它接收用户打入的命令,进行分析,创建子进程实现命令所规定的功能,等子进程终止工作后,发出提示符。这是Shell最常见的使用方式。Shell 除了作为命令解释程序以外,还是一种高级程序设计语言,它有变量,关键字,有各种控制语句,如 if, case, while, for 等语句,有自己的语法结构。利用Shell程序设计语言可以编写出功能很强、但代码简单的程序,特别是它把相关的Linux命令有机地组合在一起,可大大提高编程的效率,充分利用Linux系统的开放性能,设计出适合自己要求的命令。六、实验步骤1语法练习(1) Shell变量 Shell有两种变量:环境变量和临时变量。在Shell脚本中临时变量又分为两类:用户定义的变量和位置参数。 用户定义的变量用户定义的变量是最普遍的Shell变量,变量名是以字母或下化线打头的字母、数字和下线符序列,并且大小写字母意义不同。变量名的长度不受限制。定义变量并赋值的一般形式是: 变量名=字符串 例如, MYFILE=/usr/meng/ff/m1.ca. 定义并显示变量的值在程序中使用变量的值时,要在变量名前面加上一个符号“$”。这个符号告诉Shell,要读取该变量的值。练习1.1:$ dir=/usr/mengqc/file1$ echo $ dir/usr/mengqc/file1 $ echo dirdir$ today=Sunday$ echo $ today $ TodaySunday$ str=Hapy New Year ! $ echo Wish You $strWish You Happy New Year ! b.read命令作为交互式输入手段,可以利用read命令由标准输入(即键盘)上读取数据,然后赋给指定的变量。其一般格式是:read 变量1 变量2.练习1.2:$ read name -输入read命令mengqc -输入name的值$ echo Your Name is $ name.Your Name is mengqc -显示输出的结果$ read a b c -read命令有三个参数crtvu cn edu -输入三个字符串,中间以空格隔开$ echo Email : $a. $c. $b Email : -显示输出结果 利用read命令可交互式的为变量两赋值。输入数据时,数据间以空格或制表符作为分隔符。注意以下情况:*若变量个数与给定数据个数相同,则依次对应赋值,如上面例子所示。*若变量数少于数据个数,则从左至右依次给变量赋值,而最后一个变量取得所有余下数据的值。*若变量个数多余给定数据个数,则从左到右依次给变量赋值,后面的变量没有输入数据与之对应时,其值就为空串。 位置参数执行Shell脚本时可以使用参数。由出现命令行上的位置确定的参数称做位置参数。在sh中总共有十个位置参数,其对应的名称依次是$0,$1,$2,.$9。其中$0始终表示命令名或Shell脚本名,对于一个命令行,必然有命令名,也就必定有$0;而其它位置参数依据实际需求,可有可无。练习1.3 位置参数的作用。a.在你的计算机上建立以下三个文件(设建立在目录/usr/username之下,其中username表示你的主目录名):文件m1.c:main( )printf(Begin n);文件m2.c:# include printf(OK! n);文件ex3:# ex3: shell script to combine files and count linescat $1 $2 $3 $4 $5 $6 $7 $8 $9 | wc -l# end b.将ex3改为具有执行权限:$ chmod +x ex3c.利用env命令查看在环境变量PATH中是否包含你的当前工作目录(即/usr/use-name)。如果没有包含在其中,则利用以下语句改变PATH的值:$ PATH= $ PATH:/usr/usr/usernamed.执行脚本ex3:$ ex3 m1.c m2.c10练习1.4 利用位置参数给定变量赋值。a.建立脚本ex5,如下所示:n1=$1n2=$2n3=$3cat $n1 $n2 $n3 | wc -lb.将ex5改为具有执行权限:$ chmod +x ex5c.执行脚本ex5:$ ex5 m1.c m2.c10(2) Shell中的特殊字符 通配符通常的通配符有三种:* 星号,它匹配任意字符的0次或多次出现。但注意,文件名前面的圆点(.)和路径名中的斜线(/)必须显示匹配。? 问号,它匹配任意一个字符。 一对方括号,其中有一个字符组。其作用是匹配该字符组所限定的任意一个字符。应该注意:字符 * 和 ?在一对方括号外面是通配符,若出现在其内部,它们就失去通配符的能力了。! 叹号,若它紧跟在一对方括号的左方括号之后,则表示不在一对方括号中所列出的字符。 引号在Shell中引号分为三种:单引号、双引号、和倒引号。u 双引号由双引号括起来的字符,除$、倒引号和反斜线()仍保留其功能外,其余字符通常作为普通字符对待。练习1.5a.建立以下文件ex8:echocurrent directory ispwdechohome directory is $ HOMEechofile * . ?echo directory $ HOME b.执行ex8:$sh ex8u 单引号由单引号括起来的字符都作为普通字符出现。u 倒引号练习1.6:$ today=date$echo Today is $ todayToday is Thu May 04 10 :56 :20 CST 2000$又:$ users=who | wc -l$ echo The number of users is $ usersThe number of users is 5u 反斜线转义字符,若想在字符串中使用反斜线本身,则必须采用()的形式,其中第一个反斜线作为转义字符,而把第二个反斜线变为普通字符。 (3) 条件判断与循环结构 if 语句练习1.7a.建立脚本ex9:echo The current directory is pwdif test - f $1then echo $1 is an ordinary file.else echo $ 1 is not anordinary file.fib.执行ex9:$sh ex9 ex1The current directory is /usr/mengqcex1 is anordinary file.if语句的else部分还可以是else-if结构。 (wj14)if test - f $1then cat $1else if test - d $1then ( cd $1 ;cat * )else echo $1 is neither a file nor a directory.fifi如上例改写成为:if test -f $1then cat $1elif test -d $1then ( cd $1 ; cat * )else echo $1 is neither afile nor adirectory.fi 测试语句:有两种常用形式:一种是用test命令,如上所示。另一种是用一对方括号将测试条件括起来。两种形式完全等价。例如,测试位置参数$1是否是已存在的普通文件,可写成:test -f $1,也完全可写成: -f $ l 在格式上应注意,如果在test语句中使用shell变量,为表示完整、避免造成歧异起见最好用双引号将变量括起来。利用一对方括号表示条件测试时,在左方括号之后、右方括号之前各应有空格。练习1.8a.建立脚本文件ex10echo Enter your filename read filenaneif -f $filenamethen cat $ filenameelse if -d $ filenamethen cd $ filenamels -l *else echo $ filename:bad filenamefifi b.执行ex10$sh ex10 while语句练习1.9a.建立脚本ex11:while $1 do if -f $1 then echo display : $1cat $1else echo $1 is not a file name.fishiftdoneb.执行ex11练习1.10a.建立脚本ex12:echoley in file-cread filenameechokey in data:while n $xdo read xecho $x$ filenamedonecat $ filenameb.执行ex12,并分析结果。 for语句练习1.11for day in Monday Wednesday Friday Sundaydoecho $ daydone例如: (wj20)for file in m*.cdocat $ file | moredone练习1.12a.建立脚本ex13:# display files under a given directory# $1-the nameof the diectory# $2-the of filesdir=$1;shiftif - d $ dir then cd $dirfor namedoif -f $name then cat $nameecho End of $ dir / $nameelse echo Invalid file name: $ dir / $namefidoneelse echo Bad directory name : $dirfi$b.执行ex13,并分析运行结果。 2综合实验一:清除/var/log 下的log 文件练习2.1 cleanlog.sh版本1在一个最简单的例子中,一个shell 脚本其实就是将一堆系统命令列在一个文件中。好处就是把所有命令都放在一个脚本中,不用每次都敲它们.这样的话,对于特定的应用来说,这个脚本就很容易被修改或定制。在这次练习中,我们编写一个最简单的脚本,其内容是用两条命令清除/var/log/message和/var/log/wtmp中的内容。 cd /var/log cat /dev/null messagescat /dev/null wtmp echo Logs cleaned up.练习2.2 cleanlog.sh版本2下面按照Shell编程的一些规则进行改良:在第一行添加一个Bash 脚本的正确的开头部分,指定解释器为bash。使用变量指定/var/log目录,在后面使用这个变量。最后用exit退出。使用注释说明各部分的用法。#!/bin/bash# 一个Bash 脚本的正确的开头部分.# Cleanup, 版本 2# 当然要使用root 身份来运行.# 在此处插入代码,来打印错误消息,并且在不是root 身份的时候退出.LOG_DIR=/var/log# 如果使用变量,当然比把代码写死的好.cd $LOG_DIRcat /dev/null messagescat /dev/null wtmpecho Logs cleaned up.exit # 这个命令是一种正确并且合适的退出脚本的方法.练习2.3 cleanlog.sh版本3现在,让我们来编写有真正意义的脚本:添加权限有关语句,判断执行脚本的是否根用户,如果不是则输出出错信息,退出。添加语句,判断是否有命令行参数,如果有,假设是n,在后面的清除log的时候保留最后的n行;如果没有,设n=50。你可以不断地找到新的方法来完善这个脚本,并提高效率。#!/bin/bash# 说明:删除logfile 的脚本#LOG_DIR=/var/logROOT_UID=0 # $UID 为0 的用户才具有根用户的权限LINES=50 # 默认的保存行数E_XCD=66 # 不能修改目录,与下面的E_NOTROOT相似,用于本脚本退出返回E_NOTROOT=67 # 非根用户# 一定要使用根用户来运行if $UID -ne $ROOT_UID then echo Must be root to run this script. exit $E_NOTROOTfi if -n $1 # 测试是否有命令行参数(非空).then lines=$1else lines=$LINES # 如果不在命令行中指
温馨提示
- 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
- 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
- 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
- 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
- 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
- 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
- 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。
最新文档
- 2025-2030行李箱行业市场深度分析及发展趋势与投资战略研究报告
- 2025-2030蒙脱土(膨润土)行业市场现状供需分析及投资评估规划分析研究报告
- 针对乡村全科执业考生的备考要点试题及答案
- 2025年高考政治选必二《法律与生活》主观题三类模板
- 解码育婴师职业发展历程与考试试题及答案
- 高中会考美术试题及答案
- 疫苗与免疫学试题及答案
- 育婴师心理健康教育的重要性与应用试题及答案
- 高科技领域专利保护策略试题及答案
- 链家管理层汇报
- 《简单教数学》读后感范文
- 华南理工大学《软件分析设计与建模》2022-2023学年期末试卷
- 任务2 比亚迪·秦混合动力汽车动力系统构造与检修
- 校园天眼平台建设方案
- 世界500强企业管理层最钟爱的管理工具合集
- 森林管护工参考试题及答案
- 2022-2024年高考数学试题分类汇编:导数及其应用(解析版)
- GB/T 17727-2024船用法兰非金属垫片
- 前程无忧国企笔试题
- 人教版初中数学一次函数专题训练100题含参考答案(5篇专项)
- 2023.05.06-广东省建筑施工安全生产隐患识别图集(高处作业吊篮工程部分)
评论
0/150
提交评论