版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领
文档简介
1、第15讲 shell 编程主要内容一、shell脚本的建立和执行二、shell 程序和语句第15讲 shell 编程一、shell脚本的建立和执行shell 编程的基本过程分为两步:1. 建立 shell 脚本文件 包含任意多行操作系统命令或shell命令的文本文件;2. 执行shell文件 直接在命令行上调用shell程序.1、shell脚本的建立 Shell程序可以存放在文件中,这种被shell解释执行的命令文件称为shell脚本。shell脚本可以包含任意从键盘键入的Linux命令。建立shell脚本的步骤与建立普通文本文件的方式相同,利用编辑器(如vi)进行程序录入和编辑加工。2、执行
2、shell脚本的方式执行shell脚本的方式基本上有下述三种。1)输入定向到shell脚本。即用输入重定向方式让shell从给定文件中读入命令行,并进行相应处理。其一般形式:$ bash 脚本名例:$ bash ex12)以脚本名作为参数。其一般形式:$ bash 脚本名例:$ bash ex23)将shell脚本的权限设置为可执行,然后在提示符下直接执行它。 通常,用户是直接执行由正文编辑器(如vi)建立的shell脚本的,因为直接编辑生成的脚本文件没有“执行”权限。如果要把shell脚本直接当作命令执行,就需要利用命令chmod将它置为有“执行”权限。例如 $ chmod a+x ex$.
3、/ex2实例:1. 建立shell文件 (可用任何建立文本文件的方法): $ vi prog1(建一个文本文件名字为prog1) who | grep $1(prog1的内容)2. 赋予执行权限: (初始文本文件无执行权限) $ chmod 740 prog13. 执行该shell程序 $ prog1 root prog1: not found (shell在标准搜索目录中找不到prog1命令)4. 指定路径或修改环境变量PATH后执行shell程序 $ ./prog1 root root tty06 Feb 8 09:12二、shell 程序和语句 shell 程序由零至多条shell语句构
4、成. shell语句包括三大类: 功能性语句、结构性语句和说明性语句.说明性语句: 以#号开始到行尾的部分,不被解释执行功能性语句: 任意的操作系统命令、shell内部命令、自编 程序、其它shell程序名等。结构性语句: 条件测试语句、多路分支语句、循环语句、 循环控制语句等。 说明性语句(注释行): 注释行可以出现在程序中的任何位置,既可以单独占用一行, 也可以接在执行语句的后面. 以#号开始到所在行的行尾部分,都不被解释执行. 例如:#! /bin/bash # # 本程序说明#command_1 command_2 # command_2的语句说明# 下面程序段的说明command_m
5、command_n # commandn_语句的说明告诉OS用哪种类型的shell来解释执行该程序几个常用的功能性语句(命令): read命令 read从键盘标准输入读入一行, 并赋值给后面的变量,其语法为: . read var 把读入的数据全部赋给var . read var1 var2 var3 把读入行中的第一个词(word)赋给var1, 第二个词赋给var2, 把其余所有的词赋给最后一个变量. 如果执行read语句时标准输入无数据, 则程序在此停留等侯, 直到数据的到来或被中止运行.应用实例# example1 for readecho -e “Input your name: r
6、ead usernameecho Your name is $username#example2 for readecho -e Input date with format yyyy mm dd: read year month dayecho Today is $year/$month/$day, right?echo -e Press any key to confirm and continueread answerecho I know the date, bye!let/expr 命令 算术运算命令expr主要用于进行简单的整数运算,包括加(+)、减(-)、乘(*)、整除(/)和求
7、模(%)等操作。(各个参数之间都要有空格)例如:$ expr 12 + 5 * 327$ expr 3 - 8 / 2-1$ expr 25 % 41$ num=9$ sum=expr $num * 6 $ echo $sum54变量 x 加 1 可以写作:let “x=$x+1”(跟上等式) 或者 x=expr $x + 1(跟上表达式)反斜线去掉*号的元字符含义反撇号引用命令的运行结果expr命令计算一个表达式的值 格式 :expr argexpr 3 + 2例子:计算(23)4的值1、分步计算,即先计算23,再对其和乘4s=expr 2 + 3expr $s * 42、一步完成计算:ex
8、pr expr 2 + 3 * 4 说明:运算符号和参数之间要有空格分开;通配符号(*),在作为乘法运算符时要用、“”、符号修饰是ESC键下面的符号,不是单引号let命令 格式:let arg1 arg2 .例子:计算(23)4的值let s=(2+3)*4说明:与expr命令相比,let命令更简洁直观当运算符中有、&、|等符号时,同样需要用引号(单引号、双引号)或者斜杠来修饰运算符tput 命令 tput命令主要用于设置终端工作模式, 或读出终端控制字符. tput命令与终端控制代码数据库terminfo相连, 根据shell环境变量TERM的值, 读出这种终端的指定功能控制代码. 常用的终
9、端功能控制如下表:选项功 能选项功 能bel终端响铃el光标位置到行末清字符blink闪烁显示smso启动突出显示模式bold粗体字显示smul启动下划线模式clear清屏rmso结束突出显示模式cup r c光标移到 r 行 c 列rmul结束下划线模式dim显示变暗rev反白显示ed光标位置到屏幕底清屏sgr0关闭所有属性应用实例一:# program1 for tput#tput cleartput cup 11 30tput revecho Hello, everybody!tput sgr0tput cup 24 1 该程序先清屏, 并在屏幕中央位置(11行23列)用反极性显示字符串
10、Hello, everybody!, 恢复正常显示极性后光标停留在屏幕左下角.结构性语句: 结构性语句主要根据程序的运行状态、输入数据、变量的取值、控制信号以及运行时间等因素来控制程序的运行流程。主要包括:条件测试语句(两路分支)、多路分支语句、循环语句、循环控制语句和后台执行语句等。 无任何结构性语句的shell程序是一种特例。一. 测试语句 testtest语句可测试三种对象: 字符串 整数 文件属性每种测试对象都有若干测试操作符, 例如: test $answer = yes 变量answer的值是否为字符串yes test $num eq 18 变量num的值是否为整数18 test
11、-d tmp 测试tmp是否为一个目录名1)数值运算符:用来判断数值表达式的真假 int1 -eq int2 如果int1 = int2,则为真。 int1 -ge int2 如果int1 = int2,则为真。 int1 -gt int2 如果int1 int2,则为真。 int1 -le int2 如果int1 = int2,则为真。 int1 -lt int2 如果int1 $run_logecho 参数名:参数值 $run_logcommand data_file 2 $run_logecho Exit Time:date $run_log注意:状态信息是追加, 而不是覆盖日志文件.可
12、由另一程序(进程) 定时跟踪监测日志文件, 检测到某些关键字后报警, 例如:while truedostatus=grep error $run_logIf -n $status Then 报警处理fi sleep 300done或是warning等关键字闪烁字符、反白显示、喇叭响铃等在报警及时性和减轻系统负载之间合理设定间隔时间三. 语句组的应用规则和限制 在shell程序中,常常使用包含多条语句的语句组来完成某一特定的功能,由此来优化程序的结构。语句组作为相对独立的程序模块,可被当作单条命令或函数来应用。 需要特别注意的是,命令组的标准输出被重新定向时,命令组中的所有命令的输出都将被重新定
13、向。 命令组的标准输入被重新定向时, 则根据命令组中各命令的先后次序, 输入数据先满足第一个需要输入数据的命令, 剩下的数据再满足第二个要输入数据的命令, 依此类推.语句组格式一: (command1; command2; commandn) outfile例如: (echo current dir is pwd echo files in the dir: ls l ) outfile文件outfile中的内容为: current dir is /home/teacher/zhanglan files in the dir: total 5 drwxr-xrx 2 zl teacher 51
14、6 Jul 11 18:46 src -rw-r- -r- - 1 zl teacher 73 Sep 05 12:35 file1 -rwxr-xr-x 1 zl teacher 82 Sep 05 21:08 tst9三条命令的输出都被重新定向到了文件outfile中.语句组格式二: (command1; command2; commandn) filelist test $num -ne 6 do . num=expr $num + 1 done虽然每次循环时都要执行pwd、date和 ls 命令,但只有test命令的执行结果才能决定是否进入下一轮循环.语句格式四: while 条件表达式 do 循环体命令表 done datafile例如: i=1 while read id name component do ech
温馨提示
- 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
- 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
- 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
- 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
- 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
- 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
- 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。
最新文档
- 2025年石家庄货运从业资格证考试模拟考试题目
- 2024年消防工程总分包协议执行条款详述版
- 安徽省淮北市五校联考2022-2023学年八年级下学期第一次月考历史试题
- 2024年土地储备补充协议范本3篇
- 2024年物流服务协议核心注意事项版B版
- 《真假币识别办法》课件
- 2024外墙装饰租赁及维护一体化合同3篇
- 2024年机械制造业务合作协议一
- 珠宝首饰加盟合作协议
- 宁波市地铁房买卖合同模板
- 2024年度餐饮店合伙人退出机制与财产分割协议2篇
- 《岁末年初重点行业领域安全生产提示》专题培训
- 《招商银行转型》课件
- 灵新煤矿职业病危害告知制度范文(2篇)
- 2024年安徽省广播电视行业职业技能大赛(有线广播电视机线员)考试题库(含答案)
- 山东省济南市济阳区三校联考2024-2025学年八年级上学期12月月考语文试题
- 手术室的人文关怀
- 2024合作房地产开发协议
- 农贸市场通风与空调设计方案
- 第25课《周亚夫军细柳》复习课教学设计+2024-2025学年统编版语文八年级上册
- 2024年广东省深圳市中考英语试题含解析
评论
0/150
提交评论