三、shell编程+嵌套
1.嵌套
就是if里套if
案例
2.调试脚本
调试脚本的方法:
sh -n 02.sh 仅调试脚本中的语法错误
sh -vx 02.sh 以调试的方式,查询整个执行过程
如果使用-vx,可以先注释一部分,让程序简单化
3.注意
· []表示条件测试。注意这里的空格很重要,要住在'['后面和']'前面都必须要有空格。
· 在shell中,then和if是分开的语句。如果要在同一行里输入,则需要用分号将他们隔开。
· 注意if判断中对于变量的处理,需要加引号,一面一些不必要的错误。没有加双引号会在一些空格等字符串变量判断的时候产生错误,比如[-n "$var"] ,如果var为空会出错。
· 判断是不支持浮点型的。
· 如果只单独使用>或者<号,系统会认为是输出或者输入重定向,虽然结果显示正确,但是其实是错误的,因为要对这些符号进行转义。
· 默认,运行if语句中的命令,所产生的错误信息。仍然出现在脚本的输出结果中
· 使用-z或者-n来检查长度的时候,没有定义的变量也为0
· 空变量和没有初始化的变量可能会对shell脚本测试产生灾难性的形象,因此在不确定变量内容的时候,在测试号前使用-n或者-z测试一下
· $?变量包含了之前执行命令的退出状态(最近完成的前台程序)(可以用于检测退出状态)
4.模式匹配case——案例1:简单的模式匹配
前言
shell编程中if和case都是用来做流控的。
邀请用户输入待删除用户名。询问用户,圈定要继续删除吗yes/no:
if写法
case写法
case 变量 in
模式1)
命令序列1
;;
模式1)
命令序列1
;;
模式1)
命令序列1
;;
*)
无匹配后命令序列
esac
5.模式匹配case——案例2:简单的Jump Server
由于工作中,我们需要管理多台服务器。那么访问服务器就是一件繁琐的事情。通过shell编程,编写跳板程序。当我们需要访问服务器时,看一眼服务器列表名,按一下数字,就登录成功了。
跳板主机运行跳板脚本。弹出数十台服务器名的菜单
1)mysql1
2)mysql2
3)bj-web1
q)exit
4.模式匹配case——案例3:系统管理工具箱(重点)
linux提供丰富的管理命令,用户管理,内存管理,磁盘管理,进程管理,日志管理,文件管理,软件管理,网络管理等等数十个工具包。能通过shell编程,把他们编写到一个程序里。想用某些功能,只需要按回车,,就能完成。
Command action
h 显示命令帮助
f 显示磁盘分区
d 显示磁盘挂载
m 查看内存使用
u 查看系统负载
q 退出程序