Shell脚本(2)
Shell脚本2
$?:表示前一条命令执行后的返回状态,0为执行正确,非0表示执行出现异常
- 条件测试操作
格式: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时,将提示信息并关机
- 使用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 '{print int($5)}'`
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合格,其余不合格
【推荐】国内首个AI IDE,深度理解中文开发场景,立即下载体验Trae
【推荐】编程新体验,更懂你的AI,立即体验豆包MarsCode编程助手
【推荐】抖音旗下AI助手豆包,你的智能百科全书,全免费不限次数
【推荐】轻量又高性能的 SSH 工具 IShell:AI 加持,快人一步
· Manus重磅发布:全球首款通用AI代理技术深度解析与实战指南
· 被坑几百块钱后,我竟然真的恢复了删除的微信聊天记录!
· 没有Manus邀请码?试试免邀请码的MGX或者开源的OpenManus吧
· 园子的第一款AI主题卫衣上架——"HELLO! HOW CAN I ASSIST YOU TODAY
· 【自荐】一款简洁、开源的在线白板工具 Drawnix