版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领
文档简介
1、第八章第八章 编写编写Shell管理脚本(二)管理脚本(二) 理论部分理论部分如何为变量赋值?如何查看变量的值?如何为变量赋值?如何查看变量的值?在变量应用中,反撇号的用途是什么?在变量应用中,反撇号的用途是什么?变量变量$0、$1、$?分别表示什么含义?分别表示什么含义?有哪些方式可以执行有哪些方式可以执行Shell脚本中的语句?脚本中的语句?熟悉条件测试的应用熟悉条件测试的应用会使用会使用if条件语句条件语句会使用会使用for、while循环语句循环语句会使用会使用case分支语句分支语句龙骑战机龙骑战机 http:/ case语句语句 if语句的结构语句的结构 until循环循环 if语
2、句应用示例语句应用示例 使用使用for循环循环语句语句 其他控制语句其他控制语句 for语句的结构语句的结构 for语句应用示例语句应用示例 while语句的结构语句的结构 while语句应用示例语句应用示例 使用使用while循循环语句环语句 循环控制语句循环控制语句 shift 语句语句函数的定义和调用函数的定义和调用 Shell函数应函数应用用 函数的参数传递函数的参数传递 test命令命令用途:测试特定的表达式是否成立,当条件成立时,用途:测试特定的表达式是否成立,当条件成立时,命令执行后的返回值为命令执行后的返回值为0,否则为其他数值,否则为其他数值格式:格式:test 条件表达式条
3、件表达式 条件表达式条件表达式 常见的测试类型常见的测试类型测试文件状态测试文件状态字符串比较字符串比较整数值比较整数值比较逻辑测试逻辑测试测试文件状态测试文件状态格式:格式: 操作符操作符 文件或目录文件或目录 常用的测试操作符常用的测试操作符-d:测试是否为目录(:测试是否为目录(Directory)-e:测试目录或文件是否存在(:测试目录或文件是否存在(Exist)-f:测试是否为文件(:测试是否为文件(File)-r:测试当前用户是否有权限读取(:测试当前用户是否有权限读取(Read)-w:测试当前用户是否有权限写入(:测试当前用户是否有权限写入(Write)-x:测试当前用户是否可执
4、行(:测试当前用户是否可执行(Excute)该文件)该文件-L:测试是否为符号连接(:测试是否为符号连接(Link)文件)文件rootlocalhost # -d /etc/vsftpd rootlocalhost # echo $?0rootlocalhost # -d /etc/hosts rootlocalhost # echo $?1返回值为返回值为0,表示上一,表示上一步测试的条件成立步测试的条件成立rootlocalhost # -e /media/cdrom & echo YESYES rootlocalhost # -e /media/cdrom/Server &
5、; echo YES“rootlocalhost #如果测试的条件成立如果测试的条件成立则输出则输出“YES”整数值比较整数值比较格式:格式: 整数整数1 操作符操作符 整数整数2 常用的测试操作符常用的测试操作符-eq:等于(:等于(Equal)-ne:不等于(:不等于(Not Equal)-gt:大于(:大于(Greater Than)-lt:小于(:小于(Lesser Than)-le:小于或等于(:小于或等于(Lesser or Equal)-ge:大于或等于(:大于或等于(Greater or Equal)rootlocalhost # who | wc -l5rootlocalho
6、st # who | wc -l -le 10 & echo YESYES rootlocalhost # 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分
7、区的磁盘使用率分区的磁盘使用率超过超过95%则输出则输出 YES字符串比较字符串比较格式:格式: 字符串字符串1 = 字符串字符串2 字符串字符串1 != 字符串字符串2 -z 字符串字符串 常用的测试操作符常用的测试操作符=:字符串内容相同:字符串内容相同!=:字符串内容不同,:字符串内容不同,! 号表示相反的意思号表示相反的意思-z:字符串内容为空:字符串内容为空rootlocalhost # read -p Location: FilePathLocation:/etc/inittabrootlocalhost # $FilePath = /etc/inittab & echo
8、YESYES rootlocalhost # $LANG != en.US & echo $LANGzh_CN.UTF-8 如果键入路径与指定的如果键入路径与指定的目录一致则输出目录一致则输出 YES如果当前的语言环境不是如果当前的语言环境不是 en_US,则输出则输出LANG变量的值变量的值逻辑测试逻辑测试格式:格式: 表达式表达式1 操作符操作符 表达式表达式2 . 常用的测试操作符常用的测试操作符-a或或&:逻辑与,:逻辑与,“而且而且”的意思的意思p 前后两个表达式都成立时整个测试结果才为真,否则为假 -o或或|:逻辑或,:逻辑或,“或者或者”的意思的意思p 操作符两边
9、至少一个为真时,结果为真,否则结果为假!:逻辑否:逻辑否p 当指定的条件不成立时,返回结果为真rootlocalhost # echo $USERrootrootlocalhost # $USER != teacher & echo Not teacherNot teacherrootlocalhost # $USER = teacher | echo Not teacherNot teacher如果发现用户不是如果发现用户不是 teacher则提示:则提示:“Not teacher”与上一命令行效果相同与上一命令行效果相同当当“条件成立条件成立”时执行相应的操作时执行相应的操作if
10、条件测试命令条件测试命令 then 命令序列命令序列fiif 磁盘已用空间磁盘已用空间80% then 报警报警fiif 条件测试命令条件测试命令命令序列命令序列fi 结束判断结束判断条件为真条件为真 then条件为假条件为假应用示例:应用示例:如果如果/boot分区的空间使用超过分区的空间使用超过80%,输出报警信息,输出报警信息#!/bin/bashRATE=df -hT | grep /boot | awk print $6 | cut -d % -f1 if $RATE -gt 80 then echo Warning,DISK is full!fi当当“条件成立条件成立”、“条件不成
11、立条件不成立”时执行不同操时执行不同操作作if 条件测试命令条件测试命令 then 命令序列命令序列1 else 命令序列命令序列2fiif 3306端口是否在监听状态端口是否在监听状态 then mysqld 服务已运行服务已运行 else 启动启动 mysqld 服务服务fiif 条件测试命令条件测试命令命令序列命令序列1条件为真条件为真 then命令序列命令序列2条件为假条件为假 elsefi 结束判断结束判断应用示例:应用示例:判断判断mysqld是否在运行,若已运行则输出提示信息,是否在运行,若已运行则输出提示信息,否则重新启动否则重新启动mysqld服务服务#!/bin/bashs
12、ervice mysqld status & /dev/null if $? -eq 0 then echo mysqld service is running. else /etc/init.d/mysqld restartfi相当于相当于if语句嵌套,针对多个条件执行不同操作语句嵌套,针对多个条件执行不同操作if 条件测试命令条件测试命令1 ; then 命令序列命令序列1elif 条件测试命令条件测试命令2 ; then 命令序列命令序列2elif .else 命令序列命令序列nfiif 条件测试命令条件测试命令1命令序列命令序列1条件为真条件为真 then命令序列命令序列n条件
13、为假条件为假 elseelif 条件测试命令条件测试命令2命令序列命令序列2条件为真条件为真 thenfi 结束判断结束判断请思考:请思考:如何判断如何判断/media/cdrom目录是否存在?目录是否存在?提示用户输入一个整数,如何判断该值是否小于提示用户输入一个整数,如何判断该值是否小于100?结合环境变量结合环境变量PWD,如何判断当前所在的工作目录是,如何判断当前所在的工作目录是否为否为 /usr/src?if语句结构有哪几种分支类型?语法格式分别是什么?语句结构有哪几种分支类型?语法格式分别是什么?根据变量的不同取值,重复执行一组命令操作根据变量的不同取值,重复执行一组命令操作for
14、 变量名变量名 in 取值列表取值列表do 命令序列命令序列done for 收件人收件人 in 邮件地址列表邮件地址列表do 发送邮件发送邮件done for 变量变量=取值取值1取值取值1取值取值ndone 结束循环结束循环do 命令序列命令序列取值取值n 已使用已使用应用示例应用示例1:依次输出依次输出3条文字信息,包括一天中的条文字信息,包括一天中的“Morning”、“Noon”、“Evening”字串字串rootlocalhost # vi showday.sh#!/bin/bashfor TM in Morning Noon Eveningdo echo The $TM of t
15、he day.done rootlocalhost # sh showday.shThe Morning of the day.The Noon of the day.The Evening of the day 验证脚本执行结果验证脚本执行结果应用示例应用示例2:自动检测内网的几台服务器是否能自动检测内网的几台服务器是否能ping通通待检测服务器的地址由待检测服务器的地址由chkhosts.list文件给出文件给出p 每行一个IP地址#!/bin/bashfor i in cat chkhosts.listdo ping -c 2 $i & /dev/null if $? -eq 0
16、 then echo Host $i is alive. else echo Host $i is dead. fidone通过变量替换获取待检通过变量替换获取待检测的测的IP地址列表地址列表若能若能ping通,提示通,提示 alive若不能若不能ping通,提示通,提示 dead重复测试指定的条件,只要条件成立则反复执行重复测试指定的条件,只要条件成立则反复执行对应的命令操作对应的命令操作 while 命令或表达式命令或表达式 do 命令列表命令列表 done while 可用内存可用内存 /dev/null i=expr $i + 1done 执行执行 let i+ 也可以也可以使变量使变
17、量i的值递增的值递增1应用示例应用示例2:批量删除上例中添加的批量删除上例中添加的20个系统用户帐号个系统用户帐号#!/bin/bashi=1while $i -le 20 do userdel -r stu$i i=expr $i + 1done 根据变量的不同取值,分别执行不同的命令操作根据变量的不同取值,分别执行不同的命令操作case 变量值变量值 in 模式模式1) 命令序列命令序列1 ; 模式模式2) 命令序列命令序列2 ; * ) 默认执行的命令序列默认执行的命令序列esaccase 变量变量=模式模式1esac 结束分支结束分支命令序列命令序列1;有有变量变量=模式模式2变量变量
18、=其他值其他值(*)默认命令序列默认命令序列无无是是否否否否命令序列命令序列2;有有无无是是应用示例应用示例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 ser
19、vice. ; *) echo Usage:$0 start|stop ;esac应用示例应用示例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、Spaceba
20、r or other keys. esacuntil语句根据条件执行重复操作语句根据条件执行重复操作until 条件测试命令条件测试命令do 命令序列命令序列doneuntil 条件测试命令条件测试命令条件为假条件为假条件为真条件为真done 结束循环结束循环do 命令序列命令序列用于迁移位置变量,将用于迁移位置变量,将 $1$9 依次向左传递依次向左传递例如,若当前脚本程序获得的位置变量如下:例如,若当前脚本程序获得的位置变量如下:p $1=file1、$2=file2、$3=file3、$4=file4则执行一次则执行一次shift命令后,各位置变量为:命令后,各位置变量为:p $1=fi
21、le2、$2=file3、$3=file4再次执行再次执行shift命令后,各位置变量为:命令后,各位置变量为:p $1=file3、$2=file4应用示例:应用示例:通过命令行参数传递多个整数值,并计算总和通过命令行参数传递多个整数值,并计算总和rootlocalhost # vi sumer.sh#!/bin/bashResult=0while $# -gt 0 do Result=expr $Result + $1 shiftdoneecho The sum is : $Resultrootlocalhost # ./sumer.sh 12 34 56The sum is : 102
22、验证脚本执行结果验证脚本执行结果while 命令命令 do break donebreak语句语句在在for、while、until等循环语句中,用于跳出当前所等循环语句中,用于跳出当前所在的循环体,执行循环体后的语句在的循环体,执行循环体后的语句通常在循环体中与条通常在循环体中与条件语句一起使用件语句一起使用跳跳出出循循环环while do continue donecontinue在在for、while、until等循环语句中,用于跳过循环体等循环语句中,用于跳过循环体内余下的语句,重新判断条件以便执行下一次循环内余下的语句,重新判断条件以便执行下一次循环通常在循环体中与条通常在循环体中与
23、条件语句一起使用件语句一起使用继继续续下下次次循循环环Shell函数概述函数概述在编写在编写Shell脚本程序时,将一些需要重复使用的命令脚本程序时,将一些需要重复使用的命令操作,定义为公共使用的语句块,即可称为函数操作,定义为公共使用的语句块,即可称为函数合理使用合理使用Shell函数,可以使脚本内容更加简洁,增强函数,可以使脚本内容更加简洁,增强程序的易读性,提高执行效率程序的易读性,提高执行效率定义新的函数定义新的函数调用已定义的函数调用已定义的函数向函数内传递参数向函数内传递参数function 函数名函数名 命令序列命令序列 函数名函数名() 命令序列命令序列或者函数名函数名函数名函
24、数名 参数参数1 参数参数2 .应用示例:应用示例:在脚本中定义一个加法函数,用于计算在脚本中定义一个加法函数,用于计算2个整数的和个整数的和调用该函数计算(调用该函数计算(12+34)、()、(56+789)的和)的和#!/bin/bashadder() echo expr $1 + $2adder 12 34adder 56 789rootlocalhost # sh adderfun.sh46845 验证脚本执行结果验证脚本执行结果编写编写Shell管理管理脚本(二)脚本(二)使用使用if条件语条件语句句条件测试操作条件测试操作 case语句语句 if语句的结构语句的结构 until循环
25、循环 if语句应用示例语句应用示例 使用使用for循环循环语句语句 其他控制语句其他控制语句 for语句的结构语句的结构 for语句应用示例语句应用示例 while语句的结构语句的结构 while语句应用示例语句应用示例 使用使用while循循环语句环语句 循环控制语句循环控制语句 shift 语句语句函数的定义和调用函数的定义和调用 Shell函数应函数应用用 函数的参数传递函数的参数传递 第八章第八章 编写编写Shell管理脚本(二)管理脚本(二) 上机部分上机部分需求描述需求描述编写脚本程序用于批量添加用户编写脚本程序用于批量添加用户p 提供交互,能根据提示指定添加用户的数量(少于100)、用户名前缀,并能设置帐号的失效时间、初始密码p 用户名编号统一使用2位数,如使用“01”、“02”的形式编写脚本批量删除用户编写脚本批量删除用户p 通过命令行参数指定要删除用户的名称前缀p 删除以该前缀开头的所有用户,但要防止误删除root用户实现思路实现思路编写编写myuadd.sh脚本用于批量添加用户帐号脚本用于批量
温馨提示
- 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
- 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
- 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
- 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
- 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
- 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
- 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。
最新文档
- 2024离婚法律文件:标准合同范例版B版
- 2024育儿嫂住家服务合同特殊技能培训范本3篇
- 2024研学合同协议
- 2025年度新型环保材料铺设打地坪合同范本3篇
- 2024聘用退休人员劳务合同范本
- 2025年度专业打印机租赁合同包含打印耗材及维护4篇
- 2025年度智能家居系统安装与维护承包合同8篇
- 2025年度生物科技出借咨询与服务协议4篇
- 2024年高端装备制造与技术转让协议
- 2024版洗车服务单位协议2篇
- 餐饮行业智慧餐厅管理系统方案
- 2025年度生物医药技术研发与许可协议3篇
- 电厂检修安全培训课件
- 殡葬改革课件
- 2024企业答谢晚宴会务合同3篇
- 双方个人协议书模板
- 车站安全管理研究报告
- 玛米亚RB67中文说明书
- 中华人民共和国文物保护法
- 沪教牛津版初中英语七年级下册全套单元测试题
- 因式分解法提公因式法公式法
评论
0/150
提交评论