




版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领
文档简介
第八章编写Shell管理脚本(二)1第八章编写Shell管理脚本(二)1课程回顾如何为变量赋值?如何查看变量的值?在变量应用中,反撇号的用途是什么?变量$0、$1、$?、$$分别是什么含义?有哪些方式可以执行Shell脚本中的语句?2课程回顾如何为变量赋值?如何查看变量的值?2技能展示熟悉条件测试的应用会使用if条件语句会使用for、while循环语句会使用case分支语句了解其他控制语句及函数的使用3技能展示熟悉条件测试的应用3编写Shell管理脚本(二)本章结构使用if条件语句条件测试操作case语句if语句的结构until循环if语句应用示例使用for循环语句其他控制语句for语句的结构for语句应用示例while语句的结构while语句应用示例使用while循环语句循环控制语句shift语句函数的定义和调用Shell函数应用函数的参数传递4编写Shell管理脚本(二)本章结构使用if条件语句条件测试条件测试操作test命令用途:测试特定的表达式是否成立,当条件成立时,命令执行后的返回值为0,否则为其他数值格式:test条件表达式[条件表达式]常见的测试类型测试文件状态字符串比较整数值比较逻辑测试5条件测试操作test命令5条件测试操作测试文件状态格式:[操作符文件或目录]常用的测试操作符-d:测试是否为目录(Directory)-e:测试目录或文件是否存在(Exist)-f:测试是否为文件(File)-r:测试当前用户是否有权限读取(Read)-w:测试当前用户是否有权限写入(Write)-x:测试当前用户是否可执行(Excute)该文件-L:测试是否为符号连接(Link)文件[root@localhost~]#[-d/etc/vsftpd][root@localhost~]#echo$?0[root@localhost~]#[-d/etc/hosts][root@localhost~]#echo$?1返回值为0,表示上一步测试的条件成立[root@localhost~]#[-e/media/cdrom]&&echo"YES"YES[root@localhost~]#[-e/media/cdrom/Server]&&echo"YES“[root@localhost~]#如果测试的条件成立则输出“YES”6条件测试操作测试文件状态[root@localhost~]条件测试操作整数值比较格式:[整数1操作符整数2]常用的测试操作符-eq:等于(Equal)-ne:不等于(NotEqual)-gt:大于(GreaterThan)-lt:小于(LesserThan)-le:小于或等于(LesserorEqual)-ge:大于或等于(GreaterorEqual)[root@localhost~]#who|wc-l5[root@localhost~]#[`who|wc-l`-le10]&&echo"YES"YES[root@localhost~]#df-hT|grep"/boot"|awk'{print$6}'12%[root@localhost~]#BootUsage=`df-hT|grep"/boot"|awk'{print$6}'|cut-d"%"-f1`[root@localhost~]#echo$BootUsage12[root@localhost~]#[$BootUsage-gt95]&&echo"YES"如果登录用户数小于或等于10则输出YES如果/boot分区的磁盘使用率超过95%则输出YES7条件测试操作整数值比较[root@localhost~]#条件测试操作字符串比较格式:[字符串1=字符串2][字符串1!=字符串2][-z字符串]常用的测试操作符=:字符串内容相同!=:字符串内容不同,!号表示相反的意思-z:字符串内容为空[root@localhost~]#read-p"Location:"FilePathLocation:/etc/inittab[root@localhost~]#[$FilePath="/etc/inittab"]&&echo"YES"YES[root@localhost~]#[$LANG!="en.US"]&&echo$LANGzh_CN.UTF-8如果键入路径与指定的目录一致则输出YES如果当前的语言环境不是en_US,则输出LANG变量的值8条件测试操作字符串比较[root@localhost~]#条件测试操作逻辑测试格式:[表达式1]操作符[表达式2]...常用的测试操作符-a或&&:逻辑与,“而且”的意思前后两个表达式都成立时整个测试结果才为真,否则为假-o或||:逻辑或,“或者”的意思操作符两边至少一个为真时,结果为真,否则结果为假!:逻辑否当指定的条件不成立时,返回结果为真[root@localhost~]#echo$USERroot[root@localhost~]#[$USER!="teacher"]&&echo"Notteacher"Notteacher[root@localhost~]#[$USER="teacher"]||echo"Notteacher"Notteacher如果发现用户不是teacher则提示:“Notteacher”与上一命令行效果相同9条件测试操作逻辑测试[root@localhost~]#if条件语句——单分支当“条件成立”时执行相应的操作if条件测试命令
then命令序列fiif磁盘已用空间>80%
then报警fiif条件测试命令命令序列…fi结束判断条件为真then条件为假10if条件语句——单分支当“条件成立”时执行相应的操作ifif条件语句——单分支应用示例:如果/boot分区的空间使用超过80%,输出报警信息#!/bin/bashRATE=`df-hT|grep"/boot"|awk'{print$6}'|cut-d"%"-f1`if[$RATE-gt80]thenecho"Warning,DISKisfull!"fi11if条件语句——单分支应用示例:#!/bin/bash1if条件语句——双分支当“条件成立”、“条件不成立”时执行不同操作if条件测试命令then命令序列1
else命令序列2fiif3306端口是否在监听状态
thenmysqld服务已运行
else启动mysqld服务fiif条件测试命令命令序列1…条件为真then命令序列2…条件为假elsefi结束判断12if条件语句——双分支当“条件成立”、“条件不成立”时执if条件语句——双分支应用示例:判断mysqld是否在运行,若已运行则输出提示信息,否则重新启动mysqld服务#!/bin/bashservicemysqldstatus&>/dev/nullif[$?-eq0]
thenecho"mysqldserviceisrunning."else/etc/init.d/mysqldrestartfi13if条件语句——双分支应用示例:#!/bin/bash1if条件语句——多分支相当于if语句嵌套,针对多个条件执行不同操作if条件测试命令1;
then命令序列1elif条件测试命令2;
then命令序列2elif...else命令序列nfiif条件测试命令1命令序列1…条件为真then命令序列n…条件为假elseelif条件测试命令2命令序列2…条件为真then…………fi结束判断14if条件语句——多分支相当于if语句嵌套,针对多个条件执小结请思考:如何判断/media/cdrom目录是否存在?提示用户输入一个整数,如何判断该值是否小于100?结合环境变量PWD,如何判断当前所在的工作目录是否为/usr/src?逻辑测试操作符&&与||的区别是什么?if语句结构有哪几种分支类型?语法格式分别是什么?15小结请思考:15for循环语句根据变量的不同取值,重复执行一组命令操作for变量名in取值列表do命令序列done
for收件人in邮件地址列表do发送邮件donefor变量=取值1取值1
…
取值ndone结束循环do命令序列…取值n已使用16for循环语句根据变量的不同取值,重复执行一组命令操作forfor循环语句应用示例1:依次输出3条文字信息,包括一天中的“Morning”、“Noon”、“Evening”字串[root@localhost~]#vishowday.sh#!/bin/bashforTMin"Morning""Noon""Evening"doecho"The$TMoftheday."done
[root@localhost~]#shshowday.shTheMorningoftheday.TheNoonoftheday.TheEveningoftheday验证脚本执行结果17for循环语句应用示例1:[root@localhost~for循环语句应用示例2:对于使用“/bin/bash”作为登录Shell的系统用户,检查他们在“/opt”目录中拥有的子目录或文件数量,如果超过100个,则列出具体个数及对应的用户帐号#!/bin/bashDIR="/opt"LMT=100ValidUsers=`grep"/bin/bash"/etc/passwd|cut-d":"-f1`forUserNamein$ValidUsersdoNum=`find$DIR-user$UserName|wc-l`if[$Num-gt$LMT];thenecho"$UserNamehave$Numfiles."fidone
获得使用bash作为登录Shell的用户名列表18for循环语句应用示例2:#!/bin/bash获得使用bwhile循环语句重复测试指定的条件,只要条件成立则反复执行对应的命令操作
while命令或表达式
do命令列表
done
while可用内存<100MB
do获取可用内存数
donewhile条件测试命令条件为真条件为假done结束循环do命令序列…19while循环语句重复测试指定的条件,只要条件成立则反复执行while循环语句应用示例1:批量添加20个系统用户帐号,用户名依次为“stu1”、“stu2”、……、“stu20”这些用户的初始密码均设置为“123456”#!/bin/bashi=1while[$i-le20]douseraddstu$iecho"123456"|passwd--stdinstu$i&>/dev/nulli=`expr$i+1`done
执行leti++也可以使变量i的值递增120while循环语句应用示例1:#!/bin/bash执行lwhile循环语句应用示例2:批量删除上例中添加的20个系统用户帐号#!/bin/bashi=1while[$i-le20]douserdel-rstu$ii=`expr$i+1`done
21while循环语句应用示例2:#!/bin/bash21case多重分支语句根据变量的不同取值,分别执行不同的命令操作case变量值in
模式1)命令序列1
;;模式2)命令序列2
;;……
*)默认执行的命令序列esaccase变量=模式1esac结束分支命令序列1…;;有变量=模式2变量=其他值(*)默认命令序列………无是否否命令序列2…;;有无是22case多重分支语句根据变量的不同取值,分别执行不同的命令操case多重分支语句应用示例1:编写脚本文件mydb.sh,用于控制系统服务mysqld当执行./mydb.shstart时,启动mysqld服务当执行./mydb.shstop时,关闭mysqld服务如果输入其他脚本参数,则显示帮助信息#!/bin/bashcase$1instart)echo"StartMySQLservice."
;;stop)echo"StopMySQLservice."
;;
*)echo"Usage:$0start|stop"
;;esac23case多重分支语句应用示例1:#!/bin/bash23case多重分支语句应用示例2:提示用户从键盘输入一个字符,判断该字符是否为字母、数字或者其它字符,并输出相应的提示信息#!/bin/bashread-p"Presssomekey,thenpressReturn:“KEYcase"$KEY“in[a-z]|[A-Z])echo"It'saletter."
;;[0-9])echo"It'sadigit."
;;
*)echo"It'sfunctionkeys、Spacebarorotherkeys."esac24case多重分支语句应用示例2:#!/bin/bash24until循环语句until语句根据条件执行重复操作until条件测试命令do命令序列doneuntil条件测试命令条件为假条件为真done结束循环do命令序列…25until循环语句until语句根据条件执行重复操作untishift迁移语句用于迁移位置变量,将$1~$9依次向左传递例如,若当前脚本程序获得的位置变量如下:$1=file1、$2=file2、$3=file3、$4=file4则执行一次shift命令后,各位置变量为:$1=file2、$2=file3、$3=file4再次执行shift命令后,各位置变量为:$1=file3、$2=file426shift迁移语句用于迁移位置变量,将$1~$9依次向左shift迁移语句应用示例:通过命令行参数传递多个整数值,并计算总和[root@localhost~]#vishowday.sh#!/bin/bashResult=0while[$#-gt0]doResult=`expr$Result+$1`
shiftdoneecho"Thesumis:$Result"[root@localhost~]#./sumer.sh123456Thesumis:102验证脚本执行结果27shift迁移语句应用示例:[root@localhostwhile命令do…………
break…………done……循环控制语句break语句在for、while、until等循环语句中,用于跳出当前所在的循环体,执行循环体后的语句通常在循环体中与条件语句一起使用跳出循环28while命令循环控制语句break语句通常在循环体中whiledo…………
continue…………done……循环控制语句continue在for、while、until等循环语句中,用于跳过循环体内余下的语句,重新判断条件以便执行下一次循环通常在循环体中与条件语句一起使用继续下次循环29while循环控制语句continue通常在循环体中与条Shell函数应用Shell函数概述在编写Shell脚本程序时,将一些需要重复使用的命令操作,定义为公共使用的语句块,即可称为函数合理使用Shell函数,可以使脚本内容更加简洁,增强程序的易读性,提高执行效率30Shell函数应用Shell函数概述30Shell函数应用定义新的函数调用已定义的函数向函数内传递参数function
函数名
{命令序列}
函数名(){命令序列}或者函数名函数名参数1参数2...31Shell函数应用定义新的函数调用已定义的函数向函数内传递参Shell函数应用应用示例:在脚本中定义一个加法函数,用于计算2个整数的和调用该函数计算(12+34)、(56+789)的和#!/bin/bashadder(){echo`expr$1+$2`}adder1234adder56789[root@localhost~]#shadderfun.sh46845验证脚本执行结果32Shell函数应用应用示例:#!/bin/bash[root本章总结编写Shell管理脚本(二)使用if条件语句条件测试操作case语句if语句的结构until循环if语句应用示例使用for循环语句其他控制语句for语句的结构for语句应用示例while语句的结构while语句应用示例使用while循环语句循环控制语句shift语句函数的定义和调用Shell函数应用函数的参数传递33本章总结编写Shell管理脚本(二)使用if条件语句条件测试实验案例1:使用Shell脚本管理系统需求描述编写脚本程序用于监测系统服务httpd的运行状态当服务状态失常时在“/var/log/htmon.log”文件中记入日志自动将状态失常的httpd服务重新启动若重启httpd服务失败,则尝试重新启动服务器主机周一至周五期间每隔15分钟执行一次监测任务编写脚本程序用于批量添加用户提供交互,能根据提示指定添加用户的数量(少于100)、用户名前缀,并能设置帐号的失效时间、初始密码用户名编号统一使用2位数,如使用“01”、“02”的形式编写脚本批量删除用户通过命令行参数指定要删除用户的名称前缀删除以该前缀开头的所有用户,但要防止误删除root用户34实验案例1:使用Shell脚本管理系统需求描述34实验案例1:使用Shell脚本管理系统实现思路编写htmon.sh脚本文件用于监测httpd服务状态通过“servicehttpdstatus”命令的返回值判断服务状态使用重定向符号“>>”追加记录日志结合crond计划任务定期执行编写myuadd.sh脚本用于批量添加用户帐号使用read命令提示用户输入变量值进行交互使用while语句循环执行添加用户的命令操作使用if语句判断用户编号,小于10时自动在前缀后补“0”编写myudel.sh脚本用于批量删除用户帐号通过位置参数“$1”传递要删除用户的名称前缀结合“grep-vroot”排除掉root用户使用for循环批量删除符合条件的用户35实验案例1:使用Shell脚本管理系统实现思路35实验案例2:编写系统服务控制脚本需求描述为已安装的zebra程序编写zebrad服务控制脚本启动服务:/etc/init.d/zebradstart终止服务:/etc/init.d/zebradstart重启服务:/etc/init.d/zebradrestart查看服务状态:/etc/init.d/zebradstatus未正确指定“start”、“stop”、“restart”、“status”参数时,输出用法帮助信息后退出在启动、终止服务时应显示相关提示信息将zebrad添加为系统服务36实验案例2:编写系统服务控制脚本需求描述36实验案例2:编写系统服务控制脚本实现思路参考已有的系统脚本建立zebrad脚本文件将启动、终止zebra程序等执行操作分别定义为函数通过“/usr/local/sbin/zebra-d”命令启动zebra服务结合“/var/run/zebra.pid”文件中的PID号终止zebra进程通过判断“zebra-d”进程信息确定zebra服务状态设置case分支语句读取执行脚本时提供的未知参数“$1”,并进行比较若为“start”、“stop”等字串,分别调用对应函数否则执行默认操作,显示用法帮助信息并退出执行“chkconfig--addzebrad”添加为系统服务37实验案例2:编写系统服务控制脚本实现思路37第八章编写Shell管理脚本(二)38第八章编写Shell管理脚本(二)1课程回顾如何为变量赋值?如何查看变量的值?在变量应用中,反撇号的用途是什么?变量$0、$1、$?、$$分别是什么含义?有哪些方式可以执行Shell脚本中的语句?39课程回顾如何为变量赋值?如何查看变量的值?2技能展示熟悉条件测试的应用会使用if条件语句会使用for、while循环语句会使用case分支语句了解其他控制语句及函数的使用40技能展示熟悉条件测试的应用3编写Shell管理脚本(二)本章结构使用if条件语句条件测试操作case语句if语句的结构until循环if语句应用示例使用for循环语句其他控制语句for语句的结构for语句应用示例while语句的结构while语句应用示例使用while循环语句循环控制语句shift语句函数的定义和调用Shell函数应用函数的参数传递41编写Shell管理脚本(二)本章结构使用if条件语句条件测试条件测试操作test命令用途:测试特定的表达式是否成立,当条件成立时,命令执行后的返回值为0,否则为其他数值格式:test条件表达式[条件表达式]常见的测试类型测试文件状态字符串比较整数值比较逻辑测试42条件测试操作test命令5条件测试操作测试文件状态格式:[操作符文件或目录]常用的测试操作符-d:测试是否为目录(Directory)-e:测试目录或文件是否存在(Exist)-f:测试是否为文件(File)-r:测试当前用户是否有权限读取(Read)-w:测试当前用户是否有权限写入(Write)-x:测试当前用户是否可执行(Excute)该文件-L:测试是否为符号连接(Link)文件[root@localhost~]#[-d/etc/vsftpd][root@localhost~]#echo$?0[root@localhost~]#[-d/etc/hosts][root@localhost~]#echo$?1返回值为0,表示上一步测试的条件成立[root@localhost~]#[-e/media/cdrom]&&echo"YES"YES[root@localhost~]#[-e/media/cdrom/Server]&&echo"YES“[root@localhost~]#如果测试的条件成立则输出“YES”43条件测试操作测试文件状态[root@localhost~]条件测试操作整数值比较格式:[整数1操作符整数2]常用的测试操作符-eq:等于(Equal)-ne:不等于(NotEqual)-gt:大于(GreaterThan)-lt:小于(LesserThan)-le:小于或等于(LesserorEqual)-ge:大于或等于(GreaterorEqual)[root@localhost~]#who|wc-l5[root@localhost~]#[`who|wc-l`-le10]&&echo"YES"YES[root@localhost~]#df-hT|grep"/boot"|awk'{print$6}'12%[root@localhost~]#BootUsage=`df-hT|grep"/boot"|awk'{print$6}'|cut-d"%"-f1`[root@localhost~]#echo$BootUsage12[root@localhost~]#[$BootUsage-gt95]&&echo"YES"如果登录用户数小于或等于10则输出YES如果/boot分区的磁盘使用率超过95%则输出YES44条件测试操作整数值比较[root@localhost~]#条件测试操作字符串比较格式:[字符串1=字符串2][字符串1!=字符串2][-z字符串]常用的测试操作符=:字符串内容相同!=:字符串内容不同,!号表示相反的意思-z:字符串内容为空[root@localhost~]#read-p"Location:"FilePathLocation:/etc/inittab[root@localhost~]#[$FilePath="/etc/inittab"]&&echo"YES"YES[root@localhost~]#[$LANG!="en.US"]&&echo$LANGzh_CN.UTF-8如果键入路径与指定的目录一致则输出YES如果当前的语言环境不是en_US,则输出LANG变量的值45条件测试操作字符串比较[root@localhost~]#条件测试操作逻辑测试格式:[表达式1]操作符[表达式2]...常用的测试操作符-a或&&:逻辑与,“而且”的意思前后两个表达式都成立时整个测试结果才为真,否则为假-o或||:逻辑或,“或者”的意思操作符两边至少一个为真时,结果为真,否则结果为假!:逻辑否当指定的条件不成立时,返回结果为真[root@localhost~]#echo$USERroot[root@localhost~]#[$USER!="teacher"]&&echo"Notteacher"Notteacher[root@localhost~]#[$USER="teacher"]||echo"Notteacher"Notteacher如果发现用户不是teacher则提示:“Notteacher”与上一命令行效果相同46条件测试操作逻辑测试[root@localhost~]#if条件语句——单分支当“条件成立”时执行相应的操作if条件测试命令
then命令序列fiif磁盘已用空间>80%
then报警fiif条件测试命令命令序列…fi结束判断条件为真then条件为假47if条件语句——单分支当“条件成立”时执行相应的操作ifif条件语句——单分支应用示例:如果/boot分区的空间使用超过80%,输出报警信息#!/bin/bashRATE=`df-hT|grep"/boot"|awk'{print$6}'|cut-d"%"-f1`if[$RATE-gt80]thenecho"Warning,DISKisfull!"fi48if条件语句——单分支应用示例:#!/bin/bash1if条件语句——双分支当“条件成立”、“条件不成立”时执行不同操作if条件测试命令then命令序列1
else命令序列2fiif3306端口是否在监听状态
thenmysqld服务已运行
else启动mysqld服务fiif条件测试命令命令序列1…条件为真then命令序列2…条件为假elsefi结束判断49if条件语句——双分支当“条件成立”、“条件不成立”时执if条件语句——双分支应用示例:判断mysqld是否在运行,若已运行则输出提示信息,否则重新启动mysqld服务#!/bin/bashservicemysqldstatus&>/dev/nullif[$?-eq0]
thenecho"mysqldserviceisrunning."else/etc/init.d/mysqldrestartfi50if条件语句——双分支应用示例:#!/bin/bash1if条件语句——多分支相当于if语句嵌套,针对多个条件执行不同操作if条件测试命令1;
then命令序列1elif条件测试命令2;
then命令序列2elif...else命令序列nfiif条件测试命令1命令序列1…条件为真then命令序列n…条件为假elseelif条件测试命令2命令序列2…条件为真then…………fi结束判断51if条件语句——多分支相当于if语句嵌套,针对多个条件执小结请思考:如何判断/media/cdrom目录是否存在?提示用户输入一个整数,如何判断该值是否小于100?结合环境变量PWD,如何判断当前所在的工作目录是否为/usr/src?逻辑测试操作符&&与||的区别是什么?if语句结构有哪几种分支类型?语法格式分别是什么?52小结请思考:15for循环语句根据变量的不同取值,重复执行一组命令操作for变量名in取值列表do命令序列done
for收件人in邮件地址列表do发送邮件donefor变量=取值1取值1
…
取值ndone结束循环do命令序列…取值n已使用53for循环语句根据变量的不同取值,重复执行一组命令操作forfor循环语句应用示例1:依次输出3条文字信息,包括一天中的“Morning”、“Noon”、“Evening”字串[root@localhost~]#vishowday.sh#!/bin/bashforTMin"Morning""Noon""Evening"doecho"The$TMoftheday."done
[root@localhost~]#shshowday.shTheMorningoftheday.TheNoonoftheday.TheEveningoftheday验证脚本执行结果54for循环语句应用示例1:[root@localhost~for循环语句应用示例2:对于使用“/bin/bash”作为登录Shell的系统用户,检查他们在“/opt”目录中拥有的子目录或文件数量,如果超过100个,则列出具体个数及对应的用户帐号#!/bin/bashDIR="/opt"LMT=100ValidUsers=`grep"/bin/bash"/etc/passwd|cut-d":"-f1`forUserNamein$ValidUsersdoNum=`find$DIR-user$UserName|wc-l`if[$Num-gt$LMT];thenecho"$UserNamehave$Numfiles."fidone
获得使用bash作为登录Shell的用户名列表55for循环语句应用示例2:#!/bin/bash获得使用bwhile循环语句重复测试指定的条件,只要条件成立则反复执行对应的命令操作
while命令或表达式
do命令列表
done
while可用内存<100MB
do获取可用内存数
donewhile条件测试命令条件为真条件为假done结束循环do命令序列…56while循环语句重复测试指定的条件,只要条件成立则反复执行while循环语句应用示例1:批量添加20个系统用户帐号,用户名依次为“stu1”、“stu2”、……、“stu20”这些用户的初始密码均设置为“123456”#!/bin/bashi=1while[$i-le20]douseraddstu$iecho"123456"|passwd--stdinstu$i&>/dev/nulli=`expr$i+1`done
执行leti++也可以使变量i的值递增157while循环语句应用示例1:#!/bin/bash执行lwhile循环语句应用示例2:批量删除上例中添加的20个系统用户帐号#!/bin/bashi=1while[$i-le20]douserdel-rstu$ii=`expr$i+1`done
58while循环语句应用示例2:#!/bin/bash21case多重分支语句根据变量的不同取值,分别执行不同的命令操作case变量值in
模式1)命令序列1
;;模式2)命令序列2
;;……
*)默认执行的命令序列esaccase变量=模式1esac结束分支命令序列1…;;有变量=模式2变量=其他值(*)默认命令序列………无是否否命令序列2…;;有无是59case多重分支语句根据变量的不同取值,分别执行不同的命令操case多重分支语句应用示例1:编写脚本文件mydb.sh,用于控制系统服务mysqld当执行./mydb.shstart时,启动mysqld服务当执行./mydb.shstop时,关闭mysqld服务如果输入其他脚本参数,则显示帮助信息#!/bin/bashcase$1instart)echo"StartMySQLservice."
;;stop)echo"StopMySQLservice."
;;
*)echo"Usage:$0start|stop"
;;esac60case多重分支语句应用示例1:#!/bin/bash23case多重分支语句应用示例2:提示用户从键盘输入一个字符,判断该字符是否为字母、数字或者其它字符,并输出相应的提示信息#!/bin/bashread-p"Presssomekey,thenpressReturn:“KEYcase"$KEY“in[a-z]|[A-Z])echo"It'saletter."
;;[0-9])echo"It'sadigit."
;;
*)echo"It'sfunctionkeys、Spacebarorotherkeys."esac61case多重分支语句应用示例2:#!/bin/bash24until循环语句until语句根据条件执行重复操作until条件测试命令do命令序列doneuntil条件测试命令条件为假条件为真done结束循环do命令序列…62until循环语句until语句根据条件执行重复操作untishift迁移语句用于迁移位置变量,将$1~$9依次向左传递例如,若当前脚本程序获得的位置变量如下:$1=file1、$2=file2、$3=file3、$4=file4则执行一次shift命令后,各位置变量为:$1=file2、$2=file3、$3=file4再次执行shift命令后,各位置变量为:$1=file3、$2=file463shift迁移语句用于迁移位置变量,将$1~$9依次向左shift迁移语句应用示例:通过命令行参数传递多个整数值,并计算总和[root@localhost~]#vishowday.sh#!/bin/bashResult=0while[$#-gt0]doResult=`expr$Result+$1`
shiftdoneecho"Thesumis:$Result"[root@localhost~]#./sumer.sh123456Thesumis:102验证脚本执行结果64shift迁移语句应用示例:[root@localhostwhile命令do…………
break…………done……循环控制语句break语句在for、while、until等循环语句中,用于跳出当前所在的循环体,执行循环体后的语句通常在循环体中与条件语句一起使用跳出循环65while命令循环控制语句break语句通常在循环体中whiledo…………
continue…………done……循环控制语句continue在for、while、until等循环语句中,用于跳过循环体内余下的语句,重新判断条件以便执行下一次循环通常在循环体中与条件语句一起使用继续下次循环66while循环控制语句continue通常在循环体中与条Shell函数应用Shell函数概述在编写Shell脚本程序时,将一些需要重复使用的命令操作,定义为公共使用的语句块,即可称为函数合理使用Shell函数,可以使脚本内容更加简洁,增强程序的易读性
温馨提示
- 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
- 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
- 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
- 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
- 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
- 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
- 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。
最新文档
- 贴砖劳务合同范本
- 员工考证合同范本
- 合伙协议与抵押合同组合文本
- 个人特色车位租赁合同
- 塑料制品生产外包协议
- 烟道清理合同范本
- 农田流转及经济效益分析协议
- 布展工程合同范本
- 创新创业支持政策分析会议服务合同
- 2025年商标权转让合同的生效依据
- 《游戏界面设计》课件-01单元-游戏界面设计概论
- FZT 14035-2017 棉与涤烂花印染布
- 2024版《公司法培训讲义》
- (2024年)健康评估教学教案心电图检查教案
- 邮政储蓄银行-客户经理(个人消费贷款)-试题+答案
- 2024年3月10日国考公务员税务局面试真题及解析
- 旅店会客登记制度
- 无人机校企合作方案
- 市政造价员道路工程预决算入门讲解(零起步培训课件)
- VOC废气治理工程中低温催化氧化技术的研究与实践
- 《管理统计学》课件
评论
0/150
提交评论