1、BENET3.0第二学期课程第二学期课程第八章 编写 Shell管理脚本(二)2课程回顾课程回顾 如何为变量赋值?如何查看变量的值? 在变量应用中,反撇号的用途是什么? 变量 $0、 $1、 $?、 $分别是什么含义? 有哪些方式可以执行 Shell脚本中的语句?3技能展示技能展示 熟悉条件测试的应用 会使用 if条件语句 会使用 for、 while循环语句 会使用 case分支语句 了解其他控制语句及函数的使用4编写 Shell管理脚本(二)本章结构本章结构使用 if条件语句条件测试操作 case语句 if语句的结构 until循环 if语句应用示例 使用 for循环语句 其他控制语句 f
2、or语句的结构 for语句应用示例 while语句的结构 while语句应用示例 使用 while循环语句 循环控制语句 shift 语句函数的定义和调用 Shell函数应用 函数的参数传递 5条件测试操作条件测试操作 test命令 用途:测试特定的表达式是否成立,当条件成立时,命令执行后的返回值为 0,否则为其他数值 格式: test 条件表达式 条件表达式 常见的测试类型 测试文件状态 字符串比较 整数值比较 逻辑测试6条件测试操作条件测试操作 测试文件状态 格式: 操作符 文件或目录 常用的测试操作符 -d:测试是否为目录( Directory) -e:测试目录或文件是否存在( Exis
3、t) -f:测试是否为文件( File) -r:测试当前用户是否有权限读取( Read) -w:测试当前用户是否有权限写入( Write) -x:测试当前用户是否可执行( Excute)该文件 -L:测试是否为符号连接( Link)文件rootlocalhost # -d /etc/vsftpd rootlocalhost # echo $?0rootlocalhost # -d /etc/hosts rootlocalhost # echo $?1返回值为 0,表示上一步测试的条件成立rootlocalhost # -e /media/cdrom then命令序列 1elif 条件测试命令
4、2 ; then命令序列 2elif .else命令序列 nfiif 条件测试命令 1命令序列 1条件为真 then命令序列 n条件为假 elseelif 条件测试命令 2命令序列 2条件为真 then fi 结束判断15小结小结 请思考: 如何判断 /media/cdrom目录是否存在? 提示用户输入一个整数,如何判断该值是否小于 100? 结合环境变量 PWD,如何判断当前所在的工作目录是否为 /usr/src? 逻辑测试操作符 thenecho “$UserName have $Num files.“fidone 教员演示操作过程教员演示操作过程获得使用 bash作为登录Shell的用户
5、名列表19while循环语句循环语句 重复测试指定的条件,只要条件成立则反复执行对应的命令操作while 命令或表达式do命令列表donewhile 可用内存 /dev/nulli=expr $i + 1done 执行 let i+ 也可以使变量 i的值递增 1教员演示操作过程教员演示操作过程21while循环语句循环语句 应用示例 2: 批量删除上例中添加的 20个系统用户帐号#!/bin/bashi=1while $i -le 20 douserdel -r stu$ii=expr $i + 1done 教员演示操作过程教员演示操作过程22case多重分支语句多重分支语句 根据变量的不同取
6、值,分别执行不同的命令操作case 变量值 in模式 1)命令序列 1;模式 2)命令序列 2;* )默认执行的命令序列esaccase 变量 =模式 1esac 结束分支命令序列 1;有变量 =模式 2变量 =其他值 (*)默认命令序列 无是否否命令序列 2;有无是23case多重分支语句多重分支语句 应用示例 1: 编写脚本文件 mydb.sh,用于控制系统服务 mysqld 当执行 ./mydb.sh start 时,启动 mysqld服务 当执行 ./mydb.sh stop 时,关闭 mysqld服务 如果输入其他脚本参数,则显示帮助信息#!/bin/bash case $1 ins
7、tart)echo “Start MySQL service.“;stop)echo “Stop MySQL service.“;*)echo “Usage: $0 start|stop“;esac24case多重分支语句多重分支语句 应用示例 2: 提示用户从键盘输入一个字符,判断该字符是否为字母、数字或者其它字符,并输出相应的提示信息 #!/bin/bashread -p “Press some key, then press Return:“ KEYcase “$KEY“ ina-z|A-Z)echo “Its a letter.“;0-9)echo “Its a digit.“;*)e
8、cho “Its function keys、 Spacebar or other keys. “esac 教员演示操作过程教员演示操作过程25until循环语句循环语句 until语句根据条件执行重复操作until 条件测试命令do命令序列doneuntil 条件测试命令条件为假条件为真done 结束循环do 命令序列 26shift迁移语句迁移语句 用于迁移位置变量,将 $1$9 依次向左传递 例如,若当前脚本程序获得的位置变量如下:p $1=file1、 $2=file2、 $3=file3、 $4=file4 则执行一次 shift命令后,各位置变量为:p $1=file2、 $2=f
9、ile3、 $3=file4 再次执行 shift命令后,各位置变量为:p $1=file3、 $2=file427shift迁移语句迁移语句 应用示例: 通过命令行参数传递多个整数值,并计算总和rootlocalhost # vi showday.sh#!/bin/bashResult=0while $# -gt 0 doResult=expr $Result + $1shiftdoneecho “The sum is : $Result“rootlocalhost # ./sumer.sh 12 34 56The sum is : 102 验证脚本执行结果28while 命令 dobrea
10、kdone循环控制语句循环控制语句 break语句 在 for、 while、 until等循环语句中,用于跳出当前所在的循环体,执行循环体后的语句通常在循环体中与条件语句一起使用跳出循环29while docontinuedone循环控制语句循环控制语句 continue 在 for、 while、 until等循环语句中,用于跳过循环体内余下的语句,重新判断条件以便执行下一次循环通常在循环体中与条件语句一起使用继续下次循环30Shell函数应用函数应用 Shell函数概述 在编写 Shell脚本程序时,将一些需要重复使用的命令操作,定义为公共使用的语句块,即可称为函数 合理使用 Shell函数,可以使脚本内容更加简洁,增强程序的易读性,提高执行效率