编写shell管理脚本(二)课件

上传人:F****n 文档编号:88163053 上传时间:2019-04-20 格式:PPT 页数:37 大小:540KB
返回 下载 相关 举报
编写shell管理脚本(二)课件_第1页
第1页 / 共37页
编写shell管理脚本(二)课件_第2页
第2页 / 共37页
编写shell管理脚本(二)课件_第3页
第3页 / 共37页
编写shell管理脚本(二)课件_第4页
第4页 / 共37页
编写shell管理脚本(二)课件_第5页
第5页 / 共37页
点击查看更多>>
资源描述

《编写shell管理脚本(二)课件》由会员分享,可在线阅读,更多相关《编写shell管理脚本(二)课件(37页珍藏版)》请在金锄头文库上搜索。

1、1,第八章 编写Shell管理脚本(二),2,课程回顾,如何为变量赋值?如何查看变量的值? 在变量应用中,反撇号的用途是什么? 变量$0、$1、$?、$分别是什么含义? 有哪些方式可以执行Shell脚本中的语句?,3,技能展示,熟悉条件测试的应用 会使用if条件语句 会使用for、while循环语句 会使用case分支语句 了解其他控制语句及函数的使用,4,编写Shell管理脚本(二),本章结构,使用if条件语句,条件测试操作,case语句,if语句的结构,until循环,if语句应用示例,使用for循环语句,其他控制语句,for语句的结构,for语句应用示例,while语句的结构,while

2、语句应用示例,使用while循环语句,循环控制语句,shift 语句,函数的定义和调用,Shell函数应用,函数的参数传递,5,条件测试操作,test命令 用途:测试特定的表达式是否成立,当条件成立时,命令执行后的返回值为0,否则为其他数值 格式:test 条件表达式 条件表达式 常见的测试类型 测试文件状态 字符串比较 整数值比较 逻辑测试,6,条件测试操作,测试文件状态 格式: 操作符 文件或目录 常用的测试操作符 -d:测试是否为目录(Directory) -e:测试目录或文件是否存在(Exist) -f:测试是否为文件(File) -r:测试当前用户是否有权限读取(Read) -w:测

3、试当前用户是否有权限写入(Write) -x:测试当前用户是否可执行(Excute)该文件 -L:测试是否为符号连接(Link)文件,rootlocalhost # -d /etc/vsftpd rootlocalhost # echo $? 0 rootlocalhost # -d /etc/hosts rootlocalhost # echo $? 1,返回值为0,表示上一步测试的条件成立,rootlocalhost # -e /media/cdrom & echo “YES“ YES rootlocalhost # -e /media/cdrom/Server & echo “YES“

4、rootlocalhost #,如果测试的条件成立则输出“YES”,7,条件测试操作,整数值比较 格式: 整数1 操作符 整数2 常用的测试操作符 -eq:等于(Equal) -ne:不等于(Not Equal) -gt:大于(Greater Than) -lt:小于(Lesser Than) -le:小于或等于(Lesser or Equal) -ge:大于或等于(Greater or Equal),rootlocalhost # who | wc -l 5 rootlocalhost # who | wc -l -le 10 & echo “YES“ YES,rootlocalhost #

5、 df -hT | grep “/boot“ | awk print $6 12% rootlocalhost # BootUsage=df -hT | grep “/boot“ | awk print $6 | cut -d “%“ -f 1 rootlocalhost # echo $BootUsage 12 rootlocalhost # $BootUsage -gt 95 & echo “YES“,如果登录用户数小于或等于10则输出 YES,如果/boot分区的磁盘使用率超过95%则输出 YES,8,条件测试操作,字符串比较 格式: 字符串1 = 字符串2 字符串1 != 字符串2 -

6、z 字符串 常用的测试操作符 =:字符串内容相同 !=:字符串内容不同,! 号表示相反的意思 -z:字符串内容为空,rootlocalhost # read -p “Location:“ FilePath Location:/etc/inittab rootlocalhost # $FilePath = “/etc/inittab“ & echo “YES“ YES,rootlocalhost # $LANG != “en.US“ & echo $LANG zh_CN.UTF-8,如果键入路径与指定的目录一致则输出 YES,如果当前的语言环境不是 en_US,则输出LANG变量的值,9,条件测

7、试操作,逻辑测试 格式: 表达式1 操作符 表达式2 . 常用的测试操作符 -a或&:逻辑与,“而且”的意思 前后两个表达式都成立时整个测试结果才为真,否则为假 -o或|:逻辑或,“或者”的意思 操作符两边至少一个为真时,结果为真,否则结果为假 !:逻辑否 当指定的条件不成立时,返回结果为真,rootlocalhost # echo $USER root rootlocalhost # $USER != “teacher“ & echo “Not teacher“ Not teacher rootlocalhost # $USER = “teacher“ | echo “Not teacher

8、“ Not teacher,如果发现用户不是 teacher则提示:“Not teacher”,与上一命令行效果相同,10,if条件语句 单分支,当“条件成立”时执行相应的操作,11,if条件语句 单分支,应用示例: 如果/boot分区的空间使用超过80%,输出报警信息,#!/bin/bash RATE=df -hT | grep “/boot“ | awk print $6 | cut -d “%“ -f1 if $RATE -gt 80 then echo “Warning,DISK is full!“ fi,12,if条件语句 双分支,当“条件成立”、“条件不成立”时执行不同操作,13,

9、if条件语句 双分支,应用示例: 判断mysqld是否在运行,若已运行则输出提示信息,否则重新启动mysqld服务,#!/bin/bash service mysqld status & /dev/null if $? -eq 0 then echo “mysqld service is running.“ else /etc/init.d/mysqld restart fi,14,if条件语句 多分支,相当于if语句嵌套,针对多个条件执行不同操作,if 条件测试命令1 ; then 命令序列1 elif 条件测试命令2 ; then 命令序列2 elif . else 命令序列n fi,15

10、,小结,请思考: 如何判断/media/cdrom目录是否存在? 提示用户输入一个整数,如何判断该值是否小于100? 结合环境变量PWD,如何判断当前所在的工作目录是否为 /usr/src? 逻辑测试操作符 & 与 | 的区别是什么? if语句结构有哪几种分支类型?语法格式分别是什么?,16,for循环语句,根据变量的不同取值,重复执行一组命令操作,17,for循环语句,应用示例1: 依次输出3条文字信息,包括一天中的“Morning”、“Noon”、“Evening”字串,rootlocalhost # vi showday.sh #!/bin/bash for TM in “Morning

11、“ “Noon“ “Evening“ do echo “The $TM of the day.“ done,rootlocalhost # sh showday.sh The Morning of the day. The Noon of the day. The Evening of the day,验证脚本执行结果,18,for循环语句,应用示例2: 对于使用“/bin/bash”作为登录Shell的系统用户,检查他们在“/opt”目录中拥有的子目录或文件数量,如果超过100个,则列出具体个数及对应的用户帐号,#!/bin/bash DIR=“/opt“ LMT=100 ValidUser

12、s=grep “/bin/bash“ /etc/passwd | cut -d “:“ -f 1 for UserName in $ValidUsers do Num=find $DIR -user $UserName | wc -l if $Num -gt $LMT ; then echo “$UserName have $Num files.“ fi done,获得使用bash作为登录Shell的用户名列表,19,while循环语句,重复测试指定的条件,只要条件成立则反复执行对应的命令操作,20,while循环语句,应用示例1: 批量添加20个系统用户帐号, 用户名依次为“stu1”、“s

13、tu2”、“stu20” 这些用户的初始密码均设置为“123456”,#!/bin/bash i=1 while $i -le 20 do useradd stu$i echo “123456“ | passwd -stdin stu$i & /dev/null i=expr $i + 1 done,执行 let i+ 也可以使变量i的值递增1,21,while循环语句,应用示例2: 批量删除上例中添加的20个系统用户帐号,#!/bin/bash i=1 while $i -le 20 do userdel -r stu$i i=expr $i + 1 done,22,case多重分支语句,根

14、据变量的不同取值,分别执行不同的命令操作,case 变量值 in 模式1) 命令序列1 ; 模式2) 命令序列2 ; * ) 默认执行的命令序列 esac,23,case多重分支语句,应用示例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 serv

15、ice.“ ; *) echo “Usage:$0 start|stop“ ; esac,24,case多重分支语句,应用示例2: 提示用户从键盘输入一个字符,判断该字符是否为字母、数字或者其它字符,并输出相应的提示信息,#!/bin/bash read -p “Press some key, then press Return:“ KEY case “$KEY“ in a-z|A-Z) echo “Its a letter.“ ; 0-9) echo “Its a digit.“ ; *) echo “Its function keys、Spacebar or other keys. “ esac,25,until循环语句,until语句根据条件执行重复操作,until 条件测试命令 do 命令序列 done,26,shift迁移语句,用于迁移位置变量,将 $1$9 依次向左传递 例如,若当前脚本程序获得的位置变量如下: $1=file1、$2=file2、$3=file3、$4=file4 则执行一次shift命令后,各位置变量为: $1=file2、$2=file3、$3=file4 再次执行shift命令

展开阅读全文
相关资源
相关搜索

当前位置:首页 > 办公文档 > PPT模板库 > PPT素材/模板

电脑版 |金锄头文库版权所有
经营许可证:蜀ICP备13022795号 | 川公网安备 51140202000112号