shell之if判断句

2023-10-21 15:20
文章标签 shell 判断句

本文主要是介绍shell之if判断句,希望对大家解决编程问题提供一定的参考价值,需要的开发者们随着小编来一起学习吧!

条件测试操作

1、文件测试

-d
这里写图片描述
-f
这里写图片描述
-e
这里写图片描述
-r
这里写图片描述
-w 测试当前用户写 -x 测试当前用户是否有可执行权限。

2、整数值比较

-eq:等于。
-ne:不等于。
-gt:大于。
-lt:小于。
-le:小于或等于。
-ge:大于或等于。(l小、g、大、e等于)
这里写图片描述

3、字符串比较

=等 、!=不等、-z检查是否为空
这里写图片描述
这里写图片描述
这里写图片描述

4、逻辑测试

&& 与 、||或、!非。
4、逻辑测试
&& 与 、||或、!非。

使用if 条件语句

1、单分支

if 条件测试
then
命令
fi

2、双分支

if 条件测试
then
命令
else
命令
fi

3、多分支

if 条件测试
then
命令
(可多个elif)elif 条件测试
then
命令
else
命令
fi
可以fi结束 下一行重新开始新的条件测试。
例如:
这里写图片描述
这里写图片描述
这里写图片描述

实验案例

一、条件测试操作
1、文件测试
(1)测试目录/media是否为目录,$?返回值为0,表示存在此目录。
这里写图片描述
如果$?返回值非0,表示不存在此目录
这里写图片描述
(2)测试目录是否存在,输出结果更加直观。
输出“yes”表示该目录存在
这里写图片描述
无“yes”输出表示该目录不存在
这里写图片描述
2、整数值比较
(1)判断当前已登录的用户数,当超过5个时输出“too many”。
这里写图片描述
没有出现“too many” 说明没有超过5个。
(2)判断当前可用的空闲内存(buffers/cache)大小,当低于2048MB输出具体数值。
这里写图片描述
3、字符串比较
用户输入“yes”或“no”来确认某个任务
这里写图片描述
4、逻辑测试
判断当前linux系统的内核版本是否大于2.4。
查看内核
这里写图片描述
判断
这里写图片描述
二、if条件语句
1、单分支if语句
(1)判断挂载点目录,若不存在则自动创建
这里写图片描述
这里写图片描述
(2)判断当前用户是否为root,如果不是则执行“exit 1”退出脚本,不再执行其他代码。
这里写图片描述
这里写图片描述
2、双分支if语句
(1)判断目标主机是否存活,显示检测结果
这里写图片描述
这里写图片描述
(2)检查vsftpd服务是否运行,若运行则列出监听地址,PID号;否则启动服务(插入linux系统安装光盘,安装一下vsftpd软件包)。
这里写图片描述
启动vsftpd服务(service vsftpd start),运行一下脚本,查看结果。
停止vsftpd服务(service vsftpd stop),运行一下脚本,查看结果。
这里写图片描述
3、多分支if语句
(1)根据输入的考试分数不同来区分优秀,合格,不合格三挡。
这里写图片描述
这里写图片描述
三、
1、编写sysmon.sh脚本
(1)使用df命令提取出根分区的磁盘占用率,赋值给变量DUG。
(2)使用mpstat命令提取CPU使用率(需安装sysstat软件包),赋值给变量CUG。
(3)使用free命令提取出内存使用率,赋值给变量MUG。
(4)判断上述监控项目是否超标,将需要告警的信息保存到/tmp/alert.txt文件。
(5)判断/tmp/alert.txt文件是否存在,若存在则作为告警邮件发送。

[root@localhost ~]# vi /root/sysmon.sh
#!/bin/bash
# 提取性能监控指标(磁盘占用、CPU使用、内存使用)
DUG=$(df -h | grep “/$” | awk ‘{print $5}’ | awk -F% ‘{print $1}’)
CUG=$(expr 100 - $(mpstat | tail -1 | awk ‘{print $12}’ | awk -F. ‘{print $1}’))
注明:如果系统使用中文登录,需要将上一行的$12改为$11
MUG=$(expr $(free | grep “cache:” | awk ‘{print $3}’) \* 100 / $(free | grep “Mem:” | awk ‘{print $2}’))
# 设置告警日志文件、告警邮箱
ALOG=”/tmp/alert.txt”
AMAIL=”monitor@aaa.com”
# 判断是否记录告警
if [ $DUG -gt 90 ]
then
echo “磁盘占用率:$DUG %” >> $ALOG
fi
if [ $CUG -gt 80 ]
then
echo “CPU使用率:$CUG %” >> $ALOG
fi
if [ $MUG -gt 90 ]
then
echo “内存使用率:$MUG %” >> $ALOG
fi
# 判断是否发送告警邮件,最后删除告警日志文件
if [ -f $ALOG ]
then
cat $ALOG | mail -s “Host Alert” $AMAIL
rm -rf $ALOG
fi
[root@localhost ~]# chmod +x /root/sysmon.sh

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

[root@localhost ~]# /root/sysmon.sh

3、设置crontab计划任务
(1)确认系统服务crond已经运行。

[root@localhost ~]# /etc/init.d/crond status
crond (pid 5839) 正在运行…

添加crontab计划任务配置,每半小时调用一次sysmon.sh脚本程序。

[root@localhost ~]# crontab –e
*/30 * * * * /root/sysmon.sh

这篇关于shell之if判断句的文章就介绍到这儿,希望我们推荐的文章对编程师们有所帮助!



http://www.chinasem.cn/article/255250

相关文章

Linux中shell解析脚本的通配符、元字符、转义符说明

《Linux中shell解析脚本的通配符、元字符、转义符说明》:本文主要介绍shell通配符、元字符、转义符以及shell解析脚本的过程,通配符用于路径扩展,元字符用于多命令分割,转义符用于将特殊... 目录一、linux shell通配符(wildcard)二、shell元字符(特殊字符 Meta)三、s

shell脚本快速检查192.168.1网段ip是否在用的方法

《shell脚本快速检查192.168.1网段ip是否在用的方法》该Shell脚本通过并发ping命令检查192.168.1网段中哪些IP地址正在使用,脚本定义了网络段、超时时间和并行扫描数量,并使用... 目录脚本:检查 192.168.1 网段 IP 是否在用脚本说明使用方法示例输出优化建议总结检查 1

jenkins 插件执行shell命令时,提示“Command not found”处理方法

首先提示找不到“Command not found,可能我们第一反应是查看目标机器是否已支持该命令,不过如果相信能找到这里来的朋友估计遇到的跟我一样,其实目标机器是没有问题的通过一些远程工具执行shell命令是可以执行。奇怪的就是通过jenkinsSSH插件无法执行,经一番折腾各种搜索发现是jenkins没有加载/etc/profile导致。 【解决办法】: 需要在jenkins调用shell脚

站长常用Shell脚本整理分享(全)

站长常用Shell脚本整理分享 站长常用Shell脚本整理分享1-10 站长常用Shell脚本整理分享11-20 站长常用Shell脚本整理分享21-30 站长常用Shell脚本整理分享31-40 站长常用Shell脚本整理分享41-50 站长常用Shell脚本整理分享51-59 长期更新

Shell脚本实现自动登录服务器

1.登录脚本 login_server.sh #!/bin/bash# ReferenceLink:https://yq.aliyun.com/articles/516347#show all host infos of serverList.txtif [[ -f ./serverList.txt ]]thenhostNum=`cat ./serverList.txt | wc -l`e

[轻笔记]ubuntu shell脚本切换conda环境

source /home/yourhostname/anaconda3/etc/profile.d/conda.sh # 关键!!!conda activate env_name

[轻笔记] ubuntu Shell脚本实现监视指定进程的运行状态,并能在程序崩溃后重启动该程序

根据网上博客实现,发现只能监测进程离线,然后对其进行重启;然而,脚本无法打印程序正常状态的信息。自己通过不断修改测试,发现问题主要在重启程序的命令上(需要让重启的程序在后台运行,不然会影响监视脚本进程,使其无法正常工作)。具体程序如下: #!/bin/bashwhile [ 1 ] ; dosleep 3if [ $(ps -ef|grep exe_name|grep -v grep|

adb shell 执行后台程序后断开adb后台进程被结束的解决办法

环境:Android 版本 Android8 通常让程序后台执行就是在命令 最后加上 &即可,但是在Android 8上实验发现,程序的确后台了,但是拔掉USB线再连接上发现进程已结束。不确定Android早期版本是否存在此问题。 参考网上一些Linux方法,如加nohup 仍然无效,还是会结束。看来Android adb shell 与 Linux shell 还是有一定区别。 后来在网上

shell脚本中变量中字符串替换的测试 /和//的区别

test_char=abbbcbbbf echo "bf:test_char = " $test_char test_char=${test_char/bbb/ddd} echo "af:test_char = " $test_char 输出: bf:test_char =  abbbcbbbf af:test_char =  adddcbbbf 只匹配第一个

shell循环sleep while例子 条件判断

i=1# 小于5等于时候才执行while [ ${i} -le 5 ]doecho ${i}i=`expr ${i} + 1`# 休眠3秒sleep 3doneecho done 参考 http://c.biancheng.net/cpp/view/2736.html