SHELL脚本编程.ppt_第1页
SHELL脚本编程.ppt_第2页
SHELL脚本编程.ppt_第3页
SHELL脚本编程.ppt_第4页
SHELL脚本编程.ppt_第5页
已阅读5页,还剩18页未读 继续免费阅读

下载本文档

版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领

文档简介

SHELL脚本编程 林怀东2005 3 12linhuaidong Outline Shell脚本简介常用shell命令Shell常用变量流程控制Shell函数 shell脚本介绍 一个shell脚本可以包含一个或多个shell命令 可用来自动完成通常在命令行上执行的重复循环或者复杂的工作 节省大量时间 且功能强大shell脚本主要内容脚本按行解释执行 每一行可以是命令 注解 或是流程控制指令等脚本第一行以 开始 后面加所使用的shell 需指明整个路径名称 如 以 bin sh指定使用BourneShell 在脚本中执行一个命令的方法和在命令行中相同 可以前台或后台执行 也可设定一些环境变量注释 后面的同一行文字为注释 解释器对此不予解释脚本的流程控制近似于一般高级语言 这使得脚本的功能比DOS的批处理文件功能更加强大 常用shell命令 文件及文件属性操作ls cp mv rmln ln s chmod chown chgrp输入输出操作echo cat 标准输入0 标准输出1 标准错误输出2目录操作cd pwd lsdirmkdir cp mv rmdir rm r文本过滤Head tail grep sort uniqsed awk其他find expr获取信息 man 正则表达式 sed与awk的基础 正则表达式是一些特殊或不很特殊的字符串模式的集合 字符集包括 普通字符集和元字符集 通配符 普通字符集 大小写字母 数字 空格 下划线 行首 行尾 一个单字符后紧跟 匹配0个或多个此单字符 匹配 内字符 可以是一个单字符 也可以是字符序列 可以使用 来表示 内范围 如 1 5 等价于 1 2 3 4 5 屏蔽一个元字符的特殊含义 如 表示字符 而不表示匹配行尾 匹配任意单字符几个常见的例子 显示可执行的文件 ls l grep x x x只显示文件夹 ls l grep d匹配所有的空行 匹配所有的单词 A Za z 匹配任一非字母型字符 A Za z 包含八个字符的行 8个 Sed命令 命令格式sed pattern action filespattern 正则表达式action 操作 包括p d s示例 打印行 sed n 0 0 9 0 9 p fruit prices txt删除行 sed Mm ango d fruit prices txt执行替换 pattern1 s pattern2 pattern3 g sed s paech peach gfruit prices txt 使用多重sedsed e cmd1 e cmdN files sed e s paech peach e s 0 9 0 9 0 9 0 9 fruit prices txt在管道中使用sed awk命令 命令格式awk pattern actions files示例 字段编辑 awk F print 1 3 inputfiles或 awk F printf sis s n 1 3 inputfiles执行指定模式的操作 awk 1 9 0 9 0 9 0 9 print 0 next 0 0 9 0 9 print 0 fruit prices txt比较操作符 value pattern value pattern 相关 awk 2 1 9 0 9 0 9 0 9 3 75 printf input f利用管道符将标准输入作为输入 shell变量 为使shell编程更加容易而且有效 系统提供了一系列shell变量 可以保存诸如文件名 路径名等有用信息 使系统获知用户相关设置本地变量 在用户现在的shell生命期的脚本中使用 若shell启动另一个进程或退出 该变量值无效环境变量 用于所有用户进程 子进程 环境变量可以在命令行中设置 但用户注销时变量值丢失 可将此变量放入 profile文件中使每次登录使这些值都被初始化特定变量参数位置变量参数 本地变量 命名 可以任何不包含空白字元的字串来当做变量名称设置 v name value或 v name value 其中 设置实际值到v name 若已设置v name 重设其值 若未设置v name 报错 若未设置v name 设置新显示 echo可以显示单个变量取值 变量使用时名字前加 清除 可用unset命令清除变量 即 unsetv name查看所有本地变量 可用set命令显示所有本地定义的变量只读变量 在设值变量后加命令 readonlyv name 即将变量设为只读方式 任何人试图改变它均返回错误信息 用readonly命令可察看所有只读变量 环境变量 环境变量的设置和使用基本与本地变量相同 除了环境变量设置时必须用export导出 其格式为V NAME value exportV NAME 或舍去分号 分写成两行 查看所有环境变量使用env命令常用预留环境变量EDITOR设置编辑器 如 EDITOR vi exportEDITORPWD当前路径名MANPATH保存系统上man文本目录 目录间用冒号分隔 如MANPATH usr apps man usr local man exportMANPATH 特定变量参数 位置变量参数 有些变量用以表示脚本运行时的一些相关信息 这些变量一开始执行脚本时就会设定 并且不能被修改 被称作特定变量参数 如 0当前脚本的文件名 当前脚本的参数个数 以一个单字符串显示所有向脚本传递的参数 脚本运行的当前进程PID 后台运行的最后一个进程的PID 显示最后命令的退出状态 0表示没有错误 其他任何值均表明有错误位置变量参数可以完成向一个shell脚本传递信息的功能 位置参数可任意多 但只有前9个被访问 以 n表示当前脚本的第n个参数值 其中n 1 9 变量引用 在脚本中执行变量替换时最容易犯的错误就是由于引用错误 为防止引用时产生误解 shell有一下引用类型双引号 可引用除 外任意字符或字符串 最好在反馈文本字符串时全使用双引号单引号 可引用引号里所有字符 包括引号 A a echo A输出结果为a echo A 输出结果为a echo A 输出结果为 A反引号 设置系统命令输出到变量 shell将反引号内作为一个系统命令并执行 echo date 输出系统时间 echodate输出结果为date反斜线 屏蔽其下一字符的特殊含义 echo 打印当前整个目录列表 echo 输出结果为 流程控制 shell提供了用来控制程序执行流程的命令 用户可以用这些命令建立非常复杂的程序 与传统语言不同的是 shell用于指定条件值的不是布尔表达式而是命令和字符串控制流程包括 条件测试循环结构 条件测试 1 test命令 testcondition或 condition 用于检查某个条件是否成立 它可以进行数值 字符和文件三个方面的测试 其测试符和相应的功能分别如下 数值测试 eq 相等 ge 数1大于等于数2 gt 数1大于数2 ne 不相等 le 数1小于等于数2 lt 数1小于数2字符串测试 相等 不相等 z字符串 空串 n字符串 非空串文件状态测试 e文件名 文件存在 r文件名 文件存在且可读 w文件名 文件存在且可写 x文件名 文件存在且可执行 s文件名 文件存在且非空 d文件名 文件存在且为目录 f文件名 文件存在且为普通文件逻辑操作符shell提供了与 a 或 o 非 三个逻辑操作符用于将测试条件连接起来 其优先级为 最高 a 次之 o 最低 条件测试 2 shell脚本中的条件分支是通过if条件语句来实现 其格式为if条件命令串1then条件1为真时的命令串elif条件命令串2then条件1为假 条件2为真时的命令串else条件1 2均为假时的命令fi例 文件拷贝输出检查ifcp bin sh ifcpifcpmyfilemyfile bakthenecho Goodcopy elseecho basename 0 error fi 其中if语句必须以fi终止elif和else部分可省略也可有多个elif部分if语句各部分不能为空但可使用永远为真的空命令 解决此问题 运行结果 从myfile到myfile bak到文件拷贝正常 shifcpGoodcopycp命令没有完成拷贝 shifcpifcp error 条件测试 3 if条件语句用于在两个选项中选定一项 而case条件选择为用户提供了根据字符串或变量的值从多个选项中选择一项的方法 其格式为 case值in模式1 若干命令行1 模式2 若干命令行2 其他命令行esac模式部分可能包括元字符 任意字符 任意单字符 类或范围中任意字符 取值后面的单词必须为in 每个模式必须以 结束 取值可为变量或常数 取值将检查匹配的每个模式 一旦匹配 将执行期间所有命令直至 之后不再继续其他模式 若无一匹配 使用 捕获该值 条件测试 3续 例 提示y或n bin sh yornecho n Doyouwishtoproceed readANScase ANSiny Y yes Yes echo yesisselected n N echo noisselected exit0 echo basename 0 Unkown exit1 esac 执行结果 shyornDoyouwishtoproceed abyorn Unkown shyornDoyouwishtoproceed yyesisselected注 echo n 输出结束时不换行readANS 从标准输入设备读入并赋值给本地变量ANSexit0 退出shell程序 其后数字为返回状态 0为成功 1为错误 循环结构 1 for循环对一个变量所有可能的值都执行一个命令序列 一般格式为 for变量名 in数值列表 do若干命令行done例1 循环备份 bin sh forcpBAK bak forloopin ls doecho copy loopto loop BAK cp loop loop BAKdone执行结果 shforcpcopyatoa bakcopybtob bak 假设变量名是var 则数值列表给出的数值将顺序替换循环命令列表中的 var 若省略in 则变量var的取值为位置参数 对变量的每一个可能的赋值都将执行do和done之间的命令列表 例2 使用参数 bin sh forparamforparamdoecho param done执行结果 shforparamHelloKittyHelloKitty 循环结构 2 while和until均用命令的返回状态值来控制循环 格式分别为 while若干命令行1do若干命令行2done例 循环输出 bin sh whilereadNUM 0echo n enter while NUM lt5 doNUM expr NUM 1 echo n NUM done until若干命令行1do若干命令行2done 只要命令行1最后一个命令的返回状态为真 就继续执行do done之间的 命令行2 until和while的区别在于 while循环在条件为真时继续执行 而until在条件为假时继续执行 执行结果 shwhileread12345注 expr 整数 字符串 的计算exprargumentoperatorargument其中乘号必须用 屏蔽其特定含义 循环结构 3 break 立即终止当前循环的执行 跳出循环 若在嵌入循环中 可指定跳出的循环个数contiune 不跳出循环 仅是不执行本次循环后面的语句而立即开始下一次循环的执行这两个语句只有放在do和done之间才有效 例 跳出case死循环脚本一直循环直到输入大于3 bin sh breakout 即空命令while doecho n Enterthenumber readANScase ANSin1 2 3 echo n ANS echo wrong break esacdone shell函数 在shell中还可以将一组命令集或语句组成一个可用块 即shell函数 它与shell程序形式上是相似的 不同的是它不是一个单独的进程 而是shell程序的一部分函数定义的基本格式为 function 函数名 若干命令行 调用函数的格式为 functionnameparam1param2 shell函数可以完成某些例行的工作 可以有自己的退出状态 用return可带返回值地返回脚本中函数调用下一条语句 可以作为if while等控制结构的条件 在函数定义时不用带参

温馨提示

  • 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
  • 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
  • 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
  • 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
  • 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
  • 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
  • 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。

评论

0/150

提交评论