Shell脚本(2)

Shell脚本2

$?:表示前一条命令执行后的返回状态,0为执行正确,非0表示执行出现异常

  1. 条件测试操作

格式:test 条件表达式或[ 条件表达式 ]

1.文件测试

-d:测试是否为目录(Directory)

-e:测试目录或文件是否存在(Exist)

-f:测试是否为文件(File)

-r:测试当前用户是否有权限读取(Read)

-w:测试当前用户是否有权限写入(Write)

-x:测试当前用户是否有可执行(Excute)权限

测试/opt是否满足条件

测试指定路径是否为目录,若是,显示YES;若不是,则不显示

2.整数值比较

-eq:第一个数等于第二个数

-ne:第一个数不等于第二个数

-gt:第一个数大于第二个数

-lt:第一个数小于第二个数

-le:第一个数小于或等于第二个数

-ge:第一个数大于或等于第二个数

查看当前登录用户

查看当前已登录的用户数

把who |wc -l输出结果(即当前登录的用户数)作为变量A的值,测试登录结果,用户数小于3时,显示too few.

查看内存空间占用情况,单位MB

检索内存(Mem)这一行

提取第4个字符,即查看内存剩余空间

把上一步操作输出结果作为变量A的值

当赋值结果小于512时,则显示赋值MB

3.字符串比较

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

!=:第一个字符串与第二个不相同,!表示取反

-z:检查字符串是否为空,对于未定义或赋予空值的变量将视为空串

判断/opt是否在默认搜索路径PATH里,若不在,则提示信息no

判断当前系统语言环境,若不是en.US,则提示信息no

判断A的变量,若为555,则提示信息Yes

4.逻辑测试

&&逻辑与,表示而且,即前后2个条件都成立,用test时,&&可改为-a

|| 逻辑或,表示或者,即前后2个条件有一个成立,用test时,||可改为-o

! 逻辑否,表示不,即指定条件不成立

编辑脚本文件

用户:喵的,还真给我关机了

修改脚本

回答2或3时,都正确

当回答的不是2时,将提示信息并关机

  1. 使用if条件语句

if语句的结构:如果……那么……

1.单分支if语句

if 条件测试操作

then

    命令序列

fi

条件测试操作既可以是test 条件表达式语句,也可以是其他可执行的命令语句;命令序列指的是一条或多条可执行的命令行,也包括嵌套使用的if语句或其他流程控制语句

 

如果磁盘已用空间大于80%,那么就邮件报警

if 磁盘已用空间>80%

then 报警

fi

vim used

方法1:

监控磁盘或CPU超过一定值邮件报警脚本:

#!/bin/bash

LANG=en_US.UTF-8

cpuUsed=`top -n 1|awk -F '[, %]+' 'NR==3 {print100-$11}'`

diskUsed=$(df -h|awk -F '[ %]+'  '/\/$/{print $5}')

logFile=/tmp/jk.log  

function Sendmail(){

    mail -s"监控报警" QQ号@qq.com <$logFile

}

function check(){

 

if [ `echo"$cpuUsed>80"|bc` -eq 1 -o $diskUsed -ge 80 ];

then echo"CPU使用率:${cpuUsed}%,磁盘使用率:${diskUsed}%">$logFile

Sendmail

fi

}

function main(){

 

check

}

main

 

 

方法2:

监控磁盘空间大小并用邮件通知脚本:

#!/bin/bash

d=`df -h|grep "/dev/sda6" |awk &apos;{print int($5)}&apos;`

logFile=/tmp/jk.log

function Sendmail(){

        mail -s "监控报警" 1665***913@qq.com <$logFile

}

function check(){

if

  [ $d -gt 80 ];

then echo "当前硬盘为${d}%" >$logFile

        Sendmail

else

        echo "硬盘够用"

fi

}

function main(){

        check

}

main

2.双分支if语句

if 条件测试操作

then

    命令序列1

else

    命令序列2

fi

如果80端口在监听,那么网站服务已在运行;如果没有,那么启动httpd服务

if 80端口是否在监听

then 网站服务已在运行

else 启动httpd服务

fi

vim Apache1

#!/bin/bash

#实时每隔3秒监控HTTP服务状态,服务异常输出报警信息,并尝试启动,服务正常时提示正常运行。

web=`netstat -ant | grep 80 | awk '{print $4}' | awk -F : '{print $4}'`

apachelog=/var/log/httpd/service.log

if [ '$web' = '80' ]

then

echo "HTTPD正在运行"

else

echo "Web服务重新启动"

echo "`date` Web服务重新启动" >> $apachelog

/etc/init.d/httpd start &> /dev/null

sleep 2

echo `date` 重新启动 | /usr/sbin/sendmail -v telephonenumber@139.com > /dev/null

fi

3.多分支if语句

if 条件测试操作

then

    命令序列10

elif 条件测试操作2

then

    命令序列2

else

    命令序列3

fi

如果分数在85-100之间,则判定优秀;如果分数在70-84之间,则判为合格,反之判定不合格

if 分数为85~100之间

then 判为优秀

elif 分数为70~84之间

then 判为合格

else

判为不合格

fi

if语句应用示例

1.单分支if语句应用

在shell脚本中执行挂载光盘的操作,如果挂载点目录不存在,则新建此目录

判断/aa是否存在,若不存在,则创建/aa

执行脚本,因为没有/aa,则创建了/aa

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

以wang登录时,非root用户条件成立

以root登录时,非root用户条件不成立

2.双分支if语句应用

编写脚本,如果目标主机能连通,显示主机可达,否则不可达

3.多分支if语句应用

编写一个成绩分档的脚本grade,根据输入的考试分数不同来区分优秀,合格,不合格三档

80-100优秀,60-79合格,其余不合格

posted @   wang-a  阅读(84)  评论(0编辑  收藏  举报
相关博文:
阅读排行:
· Manus重磅发布:全球首款通用AI代理技术深度解析与实战指南
· 被坑几百块钱后,我竟然真的恢复了删除的微信聊天记录!
· 没有Manus邀请码?试试免邀请码的MGX或者开源的OpenManus吧
· 园子的第一款AI主题卫衣上架——"HELLO! HOW CAN I ASSIST YOU TODAY
· 【自荐】一款简洁、开源的在线白板工具 Drawnix
点击右上角即可分享
微信分享提示