shell脚本应用(二)

防伪码:会当凌绝顶,一览众山小! 

第六章 shell脚本应用(二)

前言:为了使shell脚本具有一定的“判断”能力,根据不同的条件来完成不同的管理任务。使脚本具有一定的“智能”。

目标:学会使用条件测试操作+if条件语句+实验(构建postfix邮件系统并测试系统管理和维护)

一、 条件测试操作

1、 文件测试(根据给定的路径名称,判断对应的是文件还是目录,或者判断文件是否可读、可写、可执行)

-d(是否为目录)

-e(目录或文件是否存在)

-f(是否为文件)

-r(读取)-w(写入) -x(执行)

测试/media/cdrom是否存在,为0表示存在此目录,返回1不存在。

为了显示更直观,可改为以下方式

2、 整数值比较(用来判断已登录用户数量,开启进程数,磁盘使用率是否超标,以及软件版本号是否符合要求等)

设第一个数为x,第二个数为y

-eq:  x = y

-ne:  x ≠ y

-gt:  x > y

-lt:  x < y

-le:  x ≤ y

-ge:x ≥ y

1)例如:判断当前已登录的用户数,当超过5个时输出“too many”

2) 判断当前可用的空闲内存大小,当低于1024m时输出具体数值。

 3、 字符串比较(常用来检查用户输入,系统环境是否满足条件,以及判断用户输入的位置参数是否符合要求)

=:第一个字符串与第二个字符串相同

!=:第一个字符串与第二个字符创不相同

-z:检查字符串是否为空

1)例如:判断当前的语言环境,当发现不是en.us时输出提示信息“not  en.us”

2) 交互式的简单案例

4、 逻辑测试(判断两个或者多个条件之间的依赖关系)

&&:前后两个条件都成立,测试命令返回值为0(结果成立)

||:前后两个条件之一成立,测试命令返回值为0(结果成立)

!:指定条件不成立,测试命令返回值为0(结果成立)

1) 例如:判断当前linux内核版本是否大于2.4,可以执行以下操作:

二、 使用if条件语句(更好的整理脚本结构,使得层次分明,清晰易懂)

1、 单分支的if语句(条件成立,执行相应的代码)

1) 例如:挂载光盘的操作,先判断挂载点目录是否存在,若不存在则新建此目录

Vi  chkmountdir.sh,内容如下:

2) 判断当前用户是不是root,如果不是则报错并执行exit 1退出脚本(1表示退出后的返回状态值),而不再执行其他代码

Vim  chkifroot.sh

执行脚本:./chkifroot.sh,因为当前登录的用户是root,所以执行fi之后的代码

2、 双分支if语句应用(嵌套使用,多次判断)

1)例如:编写一个连通性测试脚本pinghost.sh,

设置执行权限之后测试

2) 再例如:通过shell脚本检查vsftpd服务是否运行,如果已运行则列出其监听地址、pid号,否则输出提示“vsftpd服务不可用!”

首先安装vsftpd软件

然后编写脚本vim  chkftpd.sh

接下来设置权限并执行,提示vsftpd服务不可用

开启vsftpd服务器之后再次执行脚本

3、 多分支if语句应用(能够根据多个互斥条件分别执行不同操作,实际上等同于嵌套使用的if语句)

例如:根据输入的考试分数的不同来区分优秀,合格,不合格三档

Vi  gradediv.sh

设置权限之后执行脚本:

上机实验部分:

完成此实验必须安装postfix邮件服务器,我的服务器已经安装好,只需要配置即可。

1、使用postfix   check命令检查服务器的配置,如果没有提示说明没问题。

2、 开启postfix服务

3、 修改配置文件,(/etc/postfix/main.cf)改为以下的效果。(下面的代码都有,去掉前面的#号,修改后面的值即可,

改完之后重启postfix服务,使用postfix reload重新加载。)

重启、重载

4、 安装telnet服务器和客户端(若telnet-server包装不了,先装xinetd包)

5、 配置dns服务器,在原来的基础之上修改数据文件google.com.zone即可

6、 修改vim  /etc/resolv.conf

7、 使用telnet测试邮件服务器,看到下面的220说明postfix服务器没问题,可以发送邮件了。

8、 编写sysmon.sh脚本

(1)使用df命令提取出根分区的磁盘占用率,赋值给变量DUG。

(2)使用mpstat命令提取CPU使用率(需安装sysstat软件包),赋值给变量CUG。

(3)使用free命令提取出内存使用率,赋值给变量MUG。

(4)判断上述监控项目是否超标,将需要告警的信息保存到/tmp/alert.txt文件。

(5)判断/tmp/alert.txt文件是否存在,若存在则作为告警邮件发送。

9、测试sysmon.sh脚本的执行情况

(1)确认有可用的邮件服务器(如Postfix、Sendmail等),然后调低监控阈值,执行sysmon.sh脚本进行测试。

(2) 查收[email protected]的邮箱,确认告警邮件内容。

10、设置crontab计划任务

确认系统服务crond已经运行。添加crontab计划任务配置,每半小时调用一次sysmon.sh脚本程序。

谢谢大家的观看!

时间: 2024-10-17 13:12:01

shell脚本应用(二)的相关文章

shell脚本(二)

shell脚本(二)

Follow me---快速入门shell脚本编写(二)

上次在写shell的时候发现vi和vim不一样:vim是vi的升级版本,它不仅兼容vi的所有指令,而且还有一些新的特性在里面.vim要比vi好用许多. 这次接着上次的内容,基础知识,继续学习,本文作者也在自学中,纰漏错误在所难免,若有人发现问题请指出谢谢! Lee出品,转载请注明出处http://blog.csdn.net/hnulwt/article/details/43155797 布尔运算符 先大致熟悉一下布尔相关的三个运算符 ! 非运算 -o 或运算(or) -a 与运算(and) 接着

通过Git WebHooks+脚本实现自动更新发布代码之Shell脚本(二)

依据前文<通过Git WebHooks+脚本实现自动更新发布代码>的解决方案编写的shell脚本,此脚本专门用于更新补丁文件,例如对项目中的文件实现增(add).删(remove).改(update),并且执行相关的命令,如清除缓存.重启服务等. 此Shell脚本目前设计成在本地执行,目前不适合分布式执行的情况.也就是说,此脚本最好与项目在同一个机器上,这个缺陷已经标注在脚本中了,参见脚本中的多个TODO. 脚本完成的工作: 检查配置文件合规性 备份与恢复 增删改文件 执行命令 失败回滚 除上

shell脚本(二)--if流程控制语句和for循环语句的使用

理论部分: 1.在简单的脚本中各条语句按顺序执行,从而实现自动化的管理, 顺序单一执行太过机械化,不够"智能",难以实现更加灵活的系统任务. 例如:批量安装软件包 100台机器 50台已安装 50台未安装 2.shell环境根据$?来判断是否执行成功,当返回值为0时代表执行成功.如果是非0则代表执行异常一般为1或者为1到127之间的整数. 3.常用的逻辑测试 &&:逻辑与,"并且而且"的意思 满足两个条件 ||:逻辑或,"或者"的

shell脚本笔记二:for语句

for 变量 in 循环; do       statementdone 练习: 写一个脚本计算1到100的所有整数合 #!/bin/bash # declare -i SUM=0 for I in {1..100}: do let SUM=$[$SUM+$I] done echo "The sum is $SUM"

Shell脚本学习二:Shell中的算术运算

Linux中有四种算术运算,分别是expr,let,$[],$(()). 下面分别介绍一下这四种算术运算的使用方法 一.expr的用法 [[email protected] ~]# expr 1 + 2 3 [[email protected] ~]# expr 1 - 2 -1 [[email protected] ~]# expr 8 + 6 14 [[email protected] ~]# expr 8 - 6 2 [[email protected] ~]# expr 8 \* 6 4

Linux shell 脚本(二)

五.字符串处理 1.子串截取操作: 路径分割: dirname命令:定位目标所在文件夹的位置 basename命令:目标对象的名字,通常指的指的是文件名或者最底层的目录名 使用expr命令 格式:expr substr $Var1 起始位置 截取长度 使用${}表达式 格式:${Var1:起始位置:截取长度} 例子: 1. Var="/etc/httpd/conf/httpd.conf" dirname $Var etc/httpd/conf basename $Var httpd.c

shell脚本基础二

字符串的处理1.字符串的截取方法一,使用 ${}表达式格式:${var:起始位置:长度} Phone="13788768897" # echo ${#Phone} 11 使用${}方式截取字符串时,起始位置是从0开始的(和数组下标编号类似) echo ${Phone:1:6} 378876 方法二,使用 expr substr格式:expr substr "$var" 起始位置 长度使用expr substr截取字符串时,起始编号从1开始,这个要注意与${}相区分.

shell脚本练习二

打印九九乘法表 #for语句格式 #!/bin/bash for (( a = 1 ; a <= 9 ; a++ )) do for ((b=1 ; b<=$a ; b++)) do let sum=b*a echo -ne "$a*$b=$sum\t" done echo "" done #while语句格式 #!/bin/bash a=1 while [ $a -le 9 ] do b=1 while [ $b -le $a ] do let sum

Linux/Unix shell 脚本中调用SQL,RMAN脚本

Linux/Unix shell脚本中调用或执行SQL,RMAN 等为自动化作业以及多次反复执行提供了极大的便利,因此通过Linux/Unix shell来完成Oracle的相关工作,也是DBA必不可少的技能之一.本文针对Linux/Unix shell脚本调用sql, rman 脚本给出了相关示例. 一.由shell脚本调用sql,rman脚本 [python] view plain copy print? 1.shell脚本调用sql脚本 #首先编辑sql文件 [email protecte