热门标签 | HotTags
当前位置:  开发笔记 > 编程语言 > 正文

开发笔记:Shell脚本条件语句(条件测试,if语句,case语句)

篇首语:本文由编程笔记#小编为大家整理,主要介绍了Shell脚本------条件语句(条件测试,if语句,case语句)相关的知识,希望对你有一定的参考价值。

篇首语:本文由编程笔记#小编为大家整理,主要介绍了Shell脚本------条件语句(条件测试,if语句,case语句)相关的知识,希望对你有一定的参考价值。








目录


  • 一.条件测试
    • 1.test命令
    • 2.整数值比较
    • 3.字符串比较
    • 4.逻辑测试

  • 二.if语句
    • 1.单分支结构
    • 2.双分支结构
    • 3.多分支结构

  • 三.case语句



一.条件测试

Shell环境根据命令执行后的返回状态值($?)来判断是否执行成功,当返回值为0(真true)时表示成功,返回值为非0值(假false)时表示失败或异常。


1.test命令

测试表达式是否成立,若成立返回0,否则返回其他数值

格式1: test 条件表达式
格式2: [ 条件表达式 ] 中括号两边要有空格

常用的测试操作符


测试操作符测试内容
-d测试是否为目录(Directory)
-e测试目录或文件是否存在(Exist)
-f测试是否为文件(File)
-r测试当前用户是否有权限读取(Read)
-w测试当前用户是否有权限写入(Write)
-x测试当前用户是否具有权限执行(eXcute)
-L测试是否为符号链接

在这里插入图片描述


2.整数值比较

[ 整数1 操作符 整数2 ]

常用的测试操作符


测试操作符含义
-eq等于(Equal)
-ne不等于(Not Equal)
-gt大于(Greater Than)
-lt小于(Lesser Than)
-ge大于或等于(Greater or Equal)
-le小于或等于(Greater or Equal)

who | wc -l 统计当前系统中的用户
[$(who | wc -l)-lt 5]&& echo "Yes" 用户数是否<5
[$(who | wc -l)-ge 3]&& echo "ya" 用户数是否>&#61;3

在这里插入图片描述

free -m #查看内存使用情况&#xff0c;单位为MB
Free1&#61;$(free -m | grep "Mem&#xff1a;" | awk &#39;{print $4}&#39;) 定义变量名Free1的变量值为以MB为单位显示内存情况&#xff0c;过滤出Mem行的内容&#xff0c;并且打印出第四列的内容
[ $Free1 -lt 1024 ]&& echo "当前空闲内存为${Free1}MB" 显示空闲内存是否小于1024MB&#xff0c;并且输出当前空闲内存的大小

在这里插入图片描述
浮点运算需要&#xff0c;要借助bc或awk处理

free -m 查看当前系统的内存使用情况&#xff0c;以MB为单位
Total1&#61;$(free -m | grep "Mem:" |awk &#39;{print $2}&#39;) 定义变量名Total1的变量值为以MB为单位显示内存情况&#xff0c;过滤出Mem行的内容&#xff0c;并且打印出第二列的内容
Free1&#61;$(free -m | grep "Mem&#xff1a;" |awk &#39;{print $4}&#39;) 定义变量名Free1的变量值为以MB为单位显示内存情况&#xff0c;过滤出Mem行的内容&#xff0c;并且打印出第四列的内容
free&#61;$(free -m | grep "Mem:" | awk &#39;{print $4/$2}&#39;)
echo $free 借助awk查看内存空闲率&#61;空闲内存\\总内存
echo “scale&#61;5&#xff1b;${Free1}/${Total1}| bc 借助bc查看内存空闲率

在这里插入图片描述


3.字符串比较

格式一&#xff1a; [ 字符串1 &#61; 字符串2 ]
[ 字符串1 !&#61; 字符串2 ]
格式二&#xff1a;[ -z 字符串 ]

常用的测试操作符


测试操作符含义
&#61;字符串内容相同
!&#61;字符串内容不同&#xff0c;&#xff01;号表示相反的意思
-z字符串内容为空

echo $LANG
[ $LANG &#61; "zh_CN.UTF-8"]&& echo "Yes" 测试当前语言环境&#xff0c;是中文时显示yes
[ $LANG !&#61; "en.US"]&& echo "Yes" 测试当前语言环境&#xff0c;不是英文是时显示yes

在这里插入图片描述


4.逻辑测试

格式1&#xff1a; [ 表达式1 ] 操作符 [ 表达式2 ] ……
格式2&#xff1a;命令1 操作符 命令2 ……

常用的测试操作符


测试操作符含义
-a或&&逻辑与&#xff0c;“而且”的意思
-o或‖逻辑或&#xff0c;“或者”的意思
&#xff01;逻辑否

((4>5))&& echo yes || echo no "4>5"成立时输出yes&#xff0c;不成立则显示no
no
((4<5))&& echo yes || echo no "4<5"成立时输出yes&#xff0c;不成立则显示no
yes
多个||间是或者的意思&#xff0c;成立一个即可。

在这里插入图片描述

[ 4 -lt 5 ] && echo yes || echo no "4<5"成立时&#xff0c;显示yes&#xff0c;||是或者的意思&#xff0c;成立一个即可
yes
[ 4 -gt 5 ] || echo yes && echo no "4>5"不成立&#xff0c;就会显示yes和no
yes
no
[ 4 -lt 5 ] || echo yes && echo no "4<5"成立时&#xff0c;显示no
no

在这里插入图片描述

vim ping.sh
#!/bin/bash
ping -c 3 -i 0.5 -W 2 $1 &> /dev/null && echo "$1 online" || echo "$1 off"
-c: 发送包的个数
-i:发送包的间隔时间
-W: 超时时间
-w: 多少秒后停止ping 命令操作
sh ping.sh 192.168.121.22 运行脚本文件ping开机的主机IP地址&#xff1a;192.168.121.22
sh ping.sh 192.168.121.88 运行脚本文件ping未开机的主机IP地址&#xff1a;192.168.121.88

在这里插入图片描述


二.if语句

1.单分支结构

if 条件测试操作 if 已用磁盘空间>7%
then 命令序列 then 磁盘空间不足
fi fi

在这里插入图片描述

zrg&#61;&#96;df | grep "dev/sda1" | awk ‘{print $2}’ &#96;
sy&#61;&#96;df | grep "dev/sda1" | awk &#39;{print $3}&#39; &#96;
USE&#61;&#96;awk "BEGIN {print $sy/$zrg*100}" | awk -F &#39;.&#39; &#39;{print $1}&#39;&#96;
if [USE -ge 25]
>then
> echo "警告&#xff0c;磁盘空间不足&#xff01;"
fi

在这里插入图片描述


2.双分支结构

if 条件测试操作 if 80端口是否在监听
then 命令序列1 then 网站服务已在运行
else 命令序列2 else 启动httpd服务
fi fi

在这里插入图片描述

vim http.sh
#!/bin/bash
netstat -natup |grep ":80" 查看当前系统中的80端口是否在监听
if [ $? -eq 0 ]
then
echo “网站服务已经在运行。”
else
echo“启动httpd服务”
yum -y install httpd > /dev/null 安装httpd服务
systemctl start httpd 启动httpd服务
fi

sh http.sh 运行脚本

在这里插入图片描述


3.多分支结构

if 条件测试操作1 if 分数为90~100之间
then 命令序列1 then 判为优秀
eilf 条件测试操作2 elif 分数在60~89之间
then 命令序列2 then 判为合格
else else
命令序列3 判为不合格
fi fi

在这里插入图片描述

vim chj.sh
#!/bin/bash
read -p "输入你的分数&#xff1a;" chj
if [ $chj -ge 90 ] && [ $chj -le 100]
then
echo "优秀"
elif [ $chj -ge 60 ] && [ $chj -lt 90]
then
echo "合格"
else
echo “不及格”
fi
sh shj.sh

在这里插入图片描述


三.case语句

case 变量值 in case 分数 in
模式1&#xff09; 90~100&#xff09;
命令序列1 判为优秀
&#xff1b;&#xff1b; &#xff1b;&#xff1b;
模式2&#xff09; 60-89&#xff09;
命令序列2 判为合格
&#xff1b;&#xff1b; &#xff1b;&#xff1b;
…… ……
*&#xff09; *&#xff09;
默认命令序列 判为不合格
esac esac

在这里插入图片描述

Vim chj2.sh
#!/bin/bash
read -p "请输入你的分数&#xff1a;" chenj
[[ $chenj -ge 90 && $chenj -le 100 ]] && a&#61;"A"
[[ $chenj -ge 60 && $chenj -lt 90 ]] && a&#61;"B"
[[ $chenj -ge 0 && $chenj -lt 60 ]] && a&#61;"C"
case $a in
A&#xff09;
echo "$A分&#xff0c;优秀&#xff01;"
&#xff1b;&#xff1b;
B&#xff09;
echo "$B分&#xff0c;合格&#xff01;"
&#xff1b;&#xff1b;
C&#xff09;
echo "$C分&#xff0c;不合格&#xff01;"
&#xff1b;&#xff1b;
*&#xff09;
echo “输入有误&#xff01;”
esac

在这里插入图片描述






推荐阅读
  • 其实之前也有下载过完整的android源码,但是从来没有对这个做过一些总结,在加上最近需要经常去看,索性就在从新下载,编译一下,其实这些东西官网上面都有。http:sou ... [详细]
  • 【shell】网络处理:判断IP是否在网段、两个ip是否同网段、IP地址范围、网段包含关系
    本文介绍了使用shell脚本判断IP是否在同一网段、判断IP地址是否在某个范围内、计算IP地址范围、判断网段之间的包含关系的方法和原理。通过对IP和掩码进行与计算,可以判断两个IP是否在同一网段。同时,还提供了一段用于验证IP地址的正则表达式和判断特殊IP地址的方法。 ... [详细]
  • 本文介绍了Linux系统中正则表达式的基础知识,包括正则表达式的简介、字符分类、普通字符和元字符的区别,以及在学习过程中需要注意的事项。同时提醒读者要注意正则表达式与通配符的区别,并给出了使用正则表达式时的一些建议。本文适合初学者了解Linux系统中的正则表达式,并提供了学习的参考资料。 ... [详细]
  • 成功安装Sabayon Linux在thinkpad X60上的经验分享
    本文分享了作者在国庆期间在thinkpad X60上成功安装Sabayon Linux的经验。通过修改CHOST和执行emerge命令,作者顺利完成了安装过程。Sabayon Linux是一个基于Gentoo Linux的发行版,可以将电脑快速转变为一个功能强大的系统。除了作为一个live DVD使用外,Sabayon Linux还可以被安装在硬盘上,方便用户使用。 ... [详细]
  • 本文详细介绍了在Linux虚拟化部署中进行VLAN配置的方法。首先要确认Linux系统内核是否已经支持VLAN功能,然后配置物理网卡、子网卡和虚拟VLAN网卡的关系。接着介绍了在Linux配置VLAN Trunk的步骤,包括将物理网卡添加到VLAN、检查添加的VLAN虚拟网卡信息以及重启网络服务等。最后,通过验证连通性来确认配置是否成功。 ... [详细]
  • ZABBIX 3.0 配置监控NGINX性能【OK】
    1.在agent端查看配置:nginx-V查看编辑时是否加入状态监控模块:--with-http_stub_status_module--with-http_gzip_stat ... [详细]
  • 后台自动化测试与持续部署实践
    后台自动化测试与持续部署实践https:mp.weixin.qq.comslqwGUCKZM0AvEw_xh-7BDA后台自动化测试与持续部署实践原创 腾讯程序员 腾讯技术工程 2 ... [详细]
  • 本文介绍了数据库的存储结构及其重要性,强调了关系数据库范例中将逻辑存储与物理存储分开的必要性。通过逻辑结构和物理结构的分离,可以实现对物理存储的重新组织和数据库的迁移,而应用程序不会察觉到任何更改。文章还展示了Oracle数据库的逻辑结构和物理结构,并介绍了表空间的概念和作用。 ... [详细]
  • 本文分享了一个关于在C#中使用异步代码的问题,作者在控制台中运行时代码正常工作,但在Windows窗体中却无法正常工作。作者尝试搜索局域网上的主机,但在窗体中计数器没有减少。文章提供了相关的代码和解决思路。 ... [详细]
  • 使用圣杯布局模式实现网站首页的内容布局
    本文介绍了使用圣杯布局模式实现网站首页的内容布局的方法,包括HTML部分代码和实例。同时还提供了公司新闻、最新产品、关于我们、联系我们等页面的布局示例。商品展示区包括了车里子和农家生态土鸡蛋等产品的价格信息。 ... [详细]
  • 本文介绍了2015年九月八日的js学习总结及相关知识点,包括参考书《javaScript Dom编程的艺术》、js简史、Dom、DHTML、解释型程序设计和编译型程序设计等内容。同时还提到了最佳实践是将标签放到HTML文档的最后,并且对语句和注释的使用进行了说明。 ... [详细]
  • 本文主要介绍了gym102222KVertex Covers(高维前缀和,meet in the middle)相关的知识,包括题意、思路和解题代码。题目给定一张n点m边的图,点带点权,定义点覆盖的权值为点权之积,要求所有点覆盖的权值之和膜qn小于等于36。文章详细介绍了解题思路,通过将图分成两个点数接近的点集L和R,并分别枚举子集S和T,判断S和T能否覆盖所有内部的边。文章还提到了使用位运算加速判断覆盖和推导T'的方法。最后给出了解题的代码。 ... [详细]
  • 这个问题困扰了我两天,卸载Dr.COM客户端(我们学校上网要装这个客户端登陆服务器,以后只能在网页里输入用户名和密码了),问题解决了。问题的现象:在实验室机台式机上安装openfire和sp ... [详细]
  • mysql自动打开文件_让docker中的mysql启动时自动执行sql文件
    本文提要本文目的不仅仅是创建一个MySQL的镜像,而是在其基础上再实现启动过程中自动导入数据及数据库用户的权限设置,并且在新创建出来的容器里自动启动My ... [详细]
  • Shell编程(三)bash数学运算
    本文介绍shell中的expr和bash自带的 ... [详细]
author-avatar
FrxxGp
这个家伙很懒,什么也没留下!
PHP1.CN | 中国最专业的PHP中文社区 | DevBox开发工具箱 | json解析格式化 |PHP资讯 | PHP教程 | 数据库技术 | 服务器技术 | 前端开发技术 | PHP框架 | 开发工具 | 在线工具
Copyright © 1998 - 2020 PHP1.CN. All Rights Reserved | 京公网安备 11010802041100号 | 京ICP备19059560号-4 | PHP1.CN 第一PHP社区 版权所有