热门标签 | 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

在这里插入图片描述






推荐阅读
  • 在Linux系统上构建Web服务器的详细步骤
    本文详细介绍了如何在Linux系统上搭建Web服务器的过程,包括安装Apache、PHP和MySQL等关键组件,以及遇到的一些常见问题及其解决方案。 ... [详细]
  • 本文介绍了一种监控网络接口速率的Shell脚本,重点分析了其中出现的语法错误,并提供了详细的修正方法。该脚本旨在实时监测网络接口的上传和下载速度。 ... [详细]
  • 全能终端工具推荐:高效、免费、易用
    介绍一款备受好评的全能型终端工具——MobaXterm,它不仅功能强大,而且完全免费,适合各类用户使用。 ... [详细]
  • 本文详细介绍了如何在预装Ubuntu系统的笔记本电脑上安装Windows 7。针对没有光驱的情况,提供了通过USB安装的具体方法,并解决了分区、驱动器无法识别等问题。 ... [详细]
  • Nginx 反向代理与负载均衡实验
    本实验旨在通过配置 Nginx 实现反向代理和负载均衡,确保从北京本地代理服务器访问上海的 Web 服务器时,能够依次显示红、黄、绿三种颜色页面以验证负载均衡效果。 ... [详细]
  • 小编给大家分享一下如何移除URL中的index.php,相信大部分人都还不怎么了解,因此分享这篇文章给大家参考一下,希望大家阅读完这篇文章后大有收 ... [详细]
  • 实用正则表达式有哪些
    小编给大家分享一下实用正则表达式有哪些,相信大部分人都还不怎么了解,因此分享这篇文章给大家参考一下,希望大家阅读完这篇文章后大有收获,下 ... [详细]
  • 嵌入式开发环境搭建与文件传输指南
    本文详细介绍了如何为嵌入式应用开发搭建必要的软硬件环境,并提供了通过串口和网线两种方式将文件传输到开发板的具体步骤。适合Linux开发初学者参考。 ... [详细]
  • 使用Nginx反向代理实现多域名端口映射
    本文介绍如何通过配置本地hosts文件和Nginx反向代理,实现多个虚拟域名的端口映射,使用户可以通过标准HTTP端口80访问不同后端服务。 ... [详细]
  • 深入解析Serverless架构模式
    本文将详细介绍Serverless架构模式的核心概念、工作原理及其优势。通过对比传统架构,探讨Serverless如何简化应用开发与运维流程,并介绍当前主流的Serverless平台。 ... [详细]
  • 本文详细探讨了如何通过分析单个或多个线程在瓶颈情况下的表现,来了解处理器资源的消耗。无论是单进程还是多进程环境,监控关键指标如线程数量、占用时间及调度优先级等,有助于揭示潜在的性能问题。 ... [详细]
  • 使用Powershell Studio快速构建GUI应用程序
    本文介绍了如何利用Powershell Studio创建功能强大的可视化界面。相较于传统的开发工具,Powershell Studio提供了更为简便和高效的开发体验,尤其适合需要快速构建图形用户界面(GUI)的场景。 ... [详细]
  • 本文详细介绍了一种通过MySQL弱口令漏洞在Windows操作系统上获取SYSTEM权限的方法。该方法涉及使用自定义UDF DLL文件来执行任意命令,从而实现对远程服务器的完全控制。 ... [详细]
  • 本文探讨了在iOS平台上开发BLE(蓝牙低功耗)应用程序时遇到的挑战,特别是如何实现应用在后台模式下仍能持续扫描并连接蓝牙设备。文章提供了具体的配置方法和常见的问题解决方案。 ... [详细]
  • 本文介绍了如何在Mac操作系统中实现对NTFS文件系统的完整读写功能,包括必要的软件安装步骤和配置方法。 ... [详细]
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社区 版权所有