




版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领
文档简介
1、Shell管理脚本管理脚本(二)(二)高级应用高级应用12编写编写Shell管理管理脚本(二)脚本(二)本章结构使用使用if条件语条件语句句条件测试操作条件测试操作 case语句语句 if语句的结构语句的结构 until循环循环 if语句应用示例语句应用示例 使用使用for循环循环语句语句 其他控制语句其他控制语句 for语句的结构语句的结构 for语句应用示例语句应用示例 while语句的结构语句的结构 while语句应用示例语句应用示例 使用使用while循循环语句环语句 循环控制语句循环控制语句 shift 语句语句函数的定义和调用函数的定义和调用 Shell函数应函数应用用 函数的参数
2、传递函数的参数传递 3条件测试操作test命令用途:测试特定的表达式是否成立,当条件成立时,命令执行后的返回值为0,否则为其他数值格式:test 条件表达式 条件表达式 常见的测试类型测试文件状态字符串比较整数值比较逻辑测试4条件测试操作测试文件状态格式: 操作符 文件或目录 常用的测试操作符-d:测试是否为目录(Directory)-e:测试目录或文件是否存在(Exist)-f:测试是否为文件(File)-r:测试当前用户是否有权限读取(Read)-w:测试当前用户是否有权限写入(Write)-x:测试当前用户是否可执行(Excute)该文件-L:测试是否为符号连接(Link)文件返回值为返
3、回值为0,表示上一,表示上一步测试的条件成立步测试的条件成立如果测试的条件成立如果测试的条件成立则输出则输出“YES”5条件测试操作整数值比较格式: 整数1 操作符 整数2 常用的测试操作符-eq:等于(Equal)-ne:不等于(Not Equal)-gt:大于(Greater Than)-lt:小于(Lesser Than)-le:小于或等于(Lesser or Equal)-ge:大于或等于(Greater or Equal)rootlocalhost # who | wc -l5rootlocalhost # who | wc -l -le 10 & echo YESYES r
4、ootlocalhost # df -hT | grep /boot | awk print $612% rootlocalhost # BootUsage=df -hT | grep /boot | awk print $6 | cut -d % -f 1rootlocalhost # echo $BootUsage12rootlocalhost # $BootUsage -gt 95 & echo YES 如果登录用户数小于或如果登录用户数小于或等于等于10则输出则输出 YES如果如果/boot分区的磁盘使用率分区的磁盘使用率超过超过95%则输出则输出 YES6条件测试操作字符串比
5、较格式: 字符串1 = 字符串2 字符串1 != 字符串2 -z 字符串 常用的测试操作符=:字符串内容相同!=:字符串内容不同,! 号表示相反的意思-z:字符串内容为空rootlocalhost # read -p Location: FilePathLocation:/etc/inittabrootlocalhost # $FilePath = /etc/inittab & echo YESYES rootlocalhost # $LANG != en.US & echo $LANGzh_CN.UTF-8 如果键入路径与指定的如果键入路径与指定的目录一致则输出目录一致则输出
6、 YES如果当前的语言环境不是如果当前的语言环境不是 en_US,则输出则输出LANG变量的值变量的值7条件测试操作逻辑测试格式: 表达式1 操作符 表达式2 . 常用的测试操作符-a或&:逻辑与,“而且”的意思 前后两个表达式都成立时整个测试结果才为真,否则为假 -o或|:逻辑或,“或者”的意思 操作符两边至少一个为真时,结果为真,否则结果为假!:逻辑否 当指定的条件不成立时,返回结果为真rootlocalhost # echo $USERrootrootlocalhost # $USER != teacher & echo Not teacherNot teacherroo
7、tlocalhost # $USER = teacher | echo Not teacherNot teacher如果发现用户不是如果发现用户不是 teacher则提示:则提示:“Not teacher”与上一命令行效果相同与上一命令行效果相同8if条件语句 单分支当“条件成立”时执行相应的操作if 条件测试命令条件测试命令 then 命令序列命令序列fiif 磁盘已用空间磁盘已用空间80% then 报警报警fiif 条件测试命令条件测试命令命令序列命令序列fi 结束判断结束判断条件为真条件为真 then条件为假条件为假9if条件语句 单分支应用示例:如果/boot分区的空间使用超过80%
8、,输出报警信息#!/bin/bashRATE=df -hT | grep /boot | awk print $6 | cut -d % -f1 if $RATE -gt 80 then echo Warning,DISK is full!fi10if条件语句 双分支当“条件成立”、“条件不成立”时执行不同操作if 条件测试命令条件测试命令 then 命令序列命令序列1 else 命令序列命令序列2fiif 3306端口是否在监听状态端口是否在监听状态 then mysqld 服务已运行服务已运行 else 启动启动 mysqld 服务服务fiif 条件测试命令条件测试命令命令序列命令序列1条
9、件为真条件为真 then命令序列命令序列2条件为假条件为假 elsefi 结束判断结束判断11if条件语句 双分支应用示例:判断mysqld是否在运行,若已运行则输出提示信息,否则重新启动mysqld服务#!/bin/bashservice mysqld status & /dev/null if $? -eq 0 then echo mysqld service is running. else /etc/init.d/mysqld restartfi12if条件语句 多分支相当于if语句嵌套,针对多个条件执行不同操作if 条件测试命令条件测试命令1 ; then 命令序列命令序列1
10、elif 条件测试命令条件测试命令2 ; then 命令序列命令序列2elif .else 命令序列命令序列nfiif 条件测试命令条件测试命令1命令序列命令序列1条件为真条件为真 then命令序列命令序列n条件为假条件为假 elseelif 条件测试命令条件测试命令2命令序列命令序列2条件为真条件为真 thenfi 结束判断结束判断13小结请思考:如何判断/media/cdrom目录是否存在?提示用户输入一个整数,如何判断该值是否小于100?结合环境变量PWD,如何判断当前所在的工作目录是否为 /usr/src?逻辑测试操作符 & 与 | 的区别是什么?if语句结构有哪几种分支类型?
11、语法格式分别是什么?14for循环语句根据变量的不同取值,重复执行一组命令操作for 变量名变量名 in 取值列表取值列表do 命令序列命令序列done for 收件人收件人 in 邮件地址列表邮件地址列表do 发送邮件发送邮件done for 变量变量=取值取值1取值取值1取值取值ndone 结束循环结束循环do 命令序列命令序列取值取值n 已使用已使用15for循环语句应用示例1:依次输出3条文字信息,包括一天中的“Morning”、“Noon”、“Evening”字串rootlocalhost # vi showday.sh#!/bin/bashfor TM in Morning Noo
12、n Eveningdo echo The $TM of the day.done rootlocalhost # sh showday.shThe Morning of the day.The Noon of the day.The Evening of the day 验证脚本执行结果验证脚本执行结果16for循环语句应用示例2:对于使用“/bin/bash”作为登录Shell的系统用户,检查他们在“/opt”目录中拥有的子目录或文件数量,如果超过100个,则列出具体个数及对应的用户帐号 #!/bin/bashDIR=/optLMT=100ValidUsers=grep /bin/bash
13、/etc/passwd | cut -d : -f 1for UserName in $ValidUsersdo Num=find $DIR -user $UserName | wc -l if $Num -gt $LMT ; then echo $UserName have $Num files. fidone 获得使用获得使用bash作为登录作为登录Shell的用户名列表的用户名列表17while循环语句重复测试指定的条件,只要条件成立则反复执行对应的命令操作 while 命令或表达式命令或表达式 do 命令列表命令列表 done while 可用内存可用内存 /dev/null i=ex
14、pr $i + 1done 执行执行 let i+ 也可以也可以使变量使变量i的值递增的值递增119while循环语句应用示例2:批量删除上例中添加的20个系统用户帐号#!/bin/bashi=1while $i -le 20 do userdel -r stu$i i=expr $i + 1done 20case多重分支语句根据变量的不同取值,分别执行不同的命令操作case 变量值变量值 in 模式模式1) 命令序列命令序列1 ; 模式模式2) 命令序列命令序列2 ; * ) 默认执行的命令序列默认执行的命令序列esaccase 变量变量=模式模式1esac 结束分支结束分支命令序列命令序列
15、1;有有变量变量=模式模式2变量变量=其他值其他值(*)默认命令序列默认命令序列无无是是否否否否命令序列命令序列2;有有无无是是21case多重分支语句应用示例1:编写脚本文件 mydb.sh,用于控制系统服务mysqld当执行 ./mydb.sh start 时,启动mysqld服务当执行 ./mydb.sh stop 时,关闭mysqld服务如果输入其他脚本参数,则显示帮助信息#!/bin/bash case $1 in start) echo Start MySQL service. ; stop) echo Stop MySQL service. ; *) echo Usage:$0
16、start|stop ;esac22case多重分支语句应用示例2:提示用户从键盘输入一个字符,判断该字符是否为字母、数字或者其它字符,并输出相应的提示信息 #!/bin/bashread -p Press some key, then press Return:“ KEYcase $KEY“ in a-z|A-Z) echo Its a letter. ; 0-9) echo Its a digit. ; *) echo Its function keys、Spacebar or other keys. esac23until循环语句until语句根据条件执行重复操作until 条件测试命令
17、条件测试命令do 命令序列命令序列doneuntil 条件测试命令条件测试命令条件为假条件为假条件为真条件为真done 结束循环结束循环do 命令序列命令序列24shift迁移语句用于迁移位置变量,将 $1$9 依次向左传递例如,若当前脚本程序获得的位置变量如下: $1=file1、$2=file2、$3=file3、$4=file4则执行一次shift命令后,各位置变量为: $1=file2、$2=file3、$3=file4再次执行shift命令后,各位置变量为: $1=file3、$2=file425shift迁移语句应用示例:通过命令行参数传递多个整数值,并计算总和rootlocalh
18、ost # vi showday.sh#!/bin/bashResult=0while $# -gt 0 do Result=expr $Result + $1 shiftdoneecho The sum is : $Resultrootlocalhost # ./sumer.sh 12 34 56The sum is : 102 验证脚本执行结果验证脚本执行结果26while 命令命令 do break done循环控制语句break语句在for、while、until等循环语句中,用于跳出当前所在的循环体,执行循环体后的语句通常在循环体中与条通常在循环体中与条件语句一起使用件语句一起使用跳
19、跳出出循循环环27while do continue done循环控制语句continue在for、while、until等循环语句中,用于跳过循环体内余下的语句,重新判断条件以便执行下一次循环通常在循环体中与条通常在循环体中与条件语句一起使用件语句一起使用继继续续下下次次循循环环28Shell函数应用Shell函数概述在编写Shell脚本程序时,将一些需要重复使用的命令操作,定义为公共使用的语句块,即可称为函数合理使用Shell函数,可以使脚本内容更加简洁,增强程序的易读性,提高执行效率29Shell函数应用定义新的函数调用已定义的函数调用已定义的函数向函数内传递参数向函数内传递参数func
20、tion 函数名函数名 命令序列命令序列 函数名函数名() 命令序列命令序列或者函数名函数名函数名函数名 参数参数1 参数参数2 .30Shell函数应用应用示例:在脚本中定义一个加法函数,用于计算2个整数的和调用该函数计算(12+34)、(56+789)的和#!/bin/bashadder() echo expr $1 + $2adder 12 34adder 56 789rootlocalhost # sh adderfun.sh46845 验证脚本执行结果验证脚本执行结果31本章总结编写编写Shell管理管理脚本(二)脚本(二)使用使用if条件语条件语句句条件测试操作条件测试操作 cas
21、e语句语句 if语句的结构语句的结构 until循环循环 if语句应用示例语句应用示例 使用使用for循环循环语句语句 其他控制语句其他控制语句 for语句的结构语句的结构 for语句应用示例语句应用示例 while语句的结构语句的结构 while语句应用示例语句应用示例 使用使用while循循环语句环语句 循环控制语句循环控制语句 shift 语句语句函数的定义和调用函数的定义和调用 Shell函数应函数应用用 函数的参数传递函数的参数传递 32实验案例1:使用Shell脚本管理系统需求描述编写脚本程序用于监测系统服务httpd的运行状态 当服务状态失常时在“/var/log/htmon.l
22、og”文件中记入日志 自动将状态失常的httpd服务重新启动 若重启httpd服务失败,则尝试重新启动服务器主机 周一至周五期间每隔15分钟执行一次监测任务编写脚本程序用于批量添加用户 提供交互,能根据提示指定添加用户的数量(少于100)、用户名前缀,并能设置帐号的失效时间、初始密码 用户名编号统一使用2位数,如使用“01”、“02”的形式编写脚本批量删除用户 通过命令行参数指定要删除用户的名称前缀 删除以该前缀开头的所有用户,但要防止误删除root用户33实验案例1:使用Shell脚本管理系统实现思路编写htmon.sh脚本文件用于监测httpd服务状态 通过“service httpd status” 命令的返回值判断服务状态 使用重定向符号“”追加记录日志 结合crond计划任务定期执行编写myuadd
温馨提示
- 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
- 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
- 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
- 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
- 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
- 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
- 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。
最新文档
- 培养幼儿观察能力的教研方案计划
- 班级管理与文化建设策略计划
- 人力资源外包的优势与劣势分析计划
- 客户关系管理的改进策略计划
- 自我剖析及改善
- 围产期健康教育
- 四年级下册数学教案-3.6《手拉手》北师大版
- 创新创业仿生章鱼笔筒
- 2025年湿法混合颗粒机项目合作计划书
- 八年级历史下册 第19课 独立自主走向国际舞台教学实录 岳麓版
- 语文-江苏省南通市、泰州市、镇江市、盐城市(部分学校)2025届高三第一次调研测试(南通一模)试题和答案
- 2024云南红河州个旧市大红屯粮食购销限公司招聘及人员易考易错模拟试题(共500题)试卷后附参考答案
- 开门见山的作文开头和结尾摘抄
- 《化妆品用原料 (动物)脐带提取物》
- 广东中考英语2020-2024年5年真题汇编-教师版-专题01 语法选择
- 水飞蓟简介课件
- 女性盆腔炎性疾病中西医结合诊治指南
- 品管圈PDCA改善项目-提高住院患者出入量记录的准确率
- 量子化学第七章-自洽场分子轨道理论
- 博物馆参观人流控制预案
- 华中师范大学第一附中2025届高考仿真模拟数学试卷含解析
评论
0/150
提交评论