Shell编程之条件语句

目录

一.条件测试:

1.条件测试的基本概念:

2.文件测试:

​编辑3.整数数值比较:

4.字符串比较:

5.逻辑测试(短路运算):

二.if语句:

1.单分支:

 ​编辑

2.双分支 :

 3.多分支语句:

 三.case语句:


一.条件测试:

1.条件测试的基本概念:

条件测试:判断某需求是否满足,需要由测试机制来实现,专用的测试表达式需要由测试命令辅助完成。

测试过程,实现评估布尔声明,以便用在条件性环境下进行执行

  • 若真,则状态码变量 $? 返回0
  • 若假,则状态码变量 $? 返回1

2.文件测试:

格式1 test 条件表达式
格式2 [ 条件表达式 ]    #注意中括号和表达式中间需要隔一个空格
 

操作符作用
-d测试是否为目录
-e测试目录或文件是否存在
-f测试 指定的对象是否为文件;指定的文件是否存在
-L测试文件是否为符号链接(软链接文件)
-r测试 当前用户是否有读权限
-w测试 当前用户是否有写权限
-x测试 当前用户是否有执行权限
属性测试作用
-t fdfd 文件描述符是否在某终端已经打开
-s FILE是否存在且非空
-N FILE文件自从上一次被读取之后是否被修改过
-O FILE当前有效用户是否为文件属主
-G FILE当前有效用户是否为文件属组
  •  test [操作符选项] 条件表达式
  • [  [操作符] 条件表达式  ] 

 

3.整数数值比较:

格式:[ 整数1 操作符 整数2 ] 公式  

  • -eq:等于(Equal)
  • -ne:不等于(Not Equal)
  • -gt:数大于(Greater Than)
  • -lt:小于(Lesser Than)
  • -le:小于或等于(Lesser or Equal)
  • -ge:大于或等于(Greater or Equal

4.字符串比较:

格式:[ "字符串1" 操作符 "字符串2" ]

           [ -z "字符串" ] 是否为空

           [ -n "字符串" ] 字符是否存在

常用的测试操作符

  • =:字符串内容相同
  • !=:字符串内容不同,! 号表示相反的意思
  • -z:字符串内容为空
  • -n: 字符是否存在

 

5.逻辑测试(短路运算):

格式1:[ 表达式1 ] 操作符 [ 表达式2 ] ...

格式2:命令1 操作符 命令2 ...

常见条件

  • -a或&&:逻辑与,“而且”的意思全真才为真
  • -o或||:逻辑或,“或者”的意思一真即为真
  • !:逻辑否

[ 表达式1 ] && [ 表达式2 ] 等同于 [ 表达式1 -a 表达式2 ] 等同于 [[ 表达式1 && 表达式2 ]] [ 表达式1 ] || [ 表达式2 ] 等同于 [ 表达式1 -o 表达式2 ] 等同于 [[ 表达式1 || 表达式2 ]] 

三元运算符

[  表达式  ] && a || b

当条件表达式为真时,取a值;当条件表达式为假时,取b值

 

二.if语句:

1.单分支:

与[ 表达式 ] && 效果相同

if [ 表达式 ];then...
fi

[root@localhost ~]# df  //查询磁盘信息
文件系统                   1K-块    已用    可用 已用% 挂载点
/dev/mapper/centos-root 10475520 4616528 5858992   45% /
devtmpfs                  917588       0  917588    0% /dev
tmpfs                     933512       0  933512    0% /dev/shm
tmpfs                     933512   17472  916040    2% /run
tmpfs                     933512       0  933512    0% /sys/fs/cgroup
/dev/sda1                1038336  182388  855948   18% /boot
tmpfs                     186704       4  186700    1% /run/user/42
tmpfs                     186704      32  186672    1% /run/user/0
/dev/sr0                 4414592 4414592       0  100% /run/media/root/CentOS 7 x86_64[root@localhost ~]# vim test.sh#!/bin/ bash
#磁盘使用率高于一定数值报警USED=$(df | grep /dev/sda1 | awk '{print $5}' | awk -F '%' '{print $1}')
if [ $USED -gt 5 ] ; then
echo "警告!当前/目录的磁盘使用率为:$USED%"
fi
[root@localhost ~]# bash test.sh 
警告!当前/目录的磁盘使用率为:18%

 

2.双分支 :

 if [ 表达式 ];then...else...fi
​​###########判断是否为超级管理员#######################
#!/bin/bash
if [ "$USER" != "root" ]
thenecho "非管理员用户无权限操作"
else
echo "是管理员用户"
fi

 3.多分支语句:

if [ 表达式 ];then...
elif [ 表达式 ];then...
elif [ 表达式 ];then...
[else]fi
#!/bin/bash
read -p "请输入你的考试分数:" gradeif [ $grade -ge 85 ]&& [ $grade -le 100 ]
then
echo "你的成绩为$grade"
echo "你的成绩为优秀"elif [ $grade -ge 70 ]&&[ $grade -le 84 ]
then
echo "你的成绩为$grade"
echo "你的成绩为良好"
elif
[ $grade -ge 60 ]&&[ $grade -le 69 ]
then
echo "你的成绩为$grade"
echo "你的成绩为合格" 
else
echo "你的成绩为$grade"
echo "你的成绩不合格"
fi

 三.case语句:

case支持glob风格的通配符:

  • * 任意长度任意字符
  • ? 任意单个字符
  • [0-9] 指定范围内的任意单个字符
  • |   或者,如: a|b
case 变量 in 
模式1)....;;模式2)....;;*)  ....;;
esca  
[root@localhost ~]# vim shuru.sh#!/bin/bash
#输入yes或no中任意一个或多个字母的大小写都能识别为yes或n0
read -p "请输入yes/no: " key
case $key in
[nN]|[nN][oO])  echo "你输入的是no";;
[Yy]|[Yy][eE][Ss])echo "你输入的是yes";;
*)echo "你输入错误不是yes/no";;
esac
[root@localhost ~]# bash shuru.sh
请输入yes/no: y
你输入的是yes
[root@localhost ~]# bash shuru.sh
请输入yes/no: no
你输入的是no
[root@localhost ~]# bash shuru.sh
请输入yes/no: ni
shuru.sh:行11: echo你输入错误不是yes/no: 没有那个文件或目录
[root@localhost ~]# bash shuru.sh
请输入yes/no: mm
你输入错误不是yes/no

 

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.rhkb.cn/news/244701.html

如若内容造成侵权/违法违规/事实不符,请联系长河编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

git bash右键菜单失效解决方法

git bash右键菜单失效解决方法 这几天重新更新了git,直接安装新版本后,右键菜单失效找不到了。找了好几个博客,发现都不全面,最后总结一下解决方法: (1)按winr,输入regedit打开注册…

Docker部署

Docker简介 Docker是一个开源的容器引擎,它有助于更快地交付应用。 Docker可将应用程序和基础设施层隔离,并且能将基础设施当作程序一样进行管理。使用 Docker可更快地打包、测试以及部署应用程序,并可以缩短从编写到部署运行代码的周期。 &a…

k8s集群加入一个master2--kubeadm方式

已经有一个集群: 192.168.206.138 master 192.168.206.136 k8s-node1 192.168.206.137 k8s-node2 kubectl get nodes -o wide 新加入一个master2节点 192.168.206.139 master2 一、初始化系统参数 139 master2 上 #在136、137、138上添加hosts“” echo "…

ntp时间适配服务器和ssh免密登录

1.配置ntp时间服务器,确保客户端主机能和服务主机同步时间 服务端server向阿里时间服务器进行时间同步 第一步:定位服务端server #安装软件 [rootserver ~]# yum install chrony -y # 编辑配置文件,定位第3行,修改…

SwiftUI 打造酷炫流光边框 + 微光滑动闪烁的 3D 透视滚动卡片墙

功能需求 有时候我们希望自己的 App 能向用户展示与众不同、富有创造力的酷炫视觉效果: 如上图所示,我们制作了一款流光边框 + 微光滑动闪烁的 3D 透视卡片滚动效果。这是怎么做到的呢? 在本篇博文中,您将学到以下内容 功能需求1. 3D 透视滚动2. 灵动边框流光效果3. 背景…

从零开始训练 YOLOv8最新8.1版本教程说明(包含Mac、Windows、Linux端 )同之前的项目版本代码有区别

从零开始训练 YOLOv8 - 最新8.1版本教程说明 本文适用Windows/Linux/Mac:从零开始使用Windows/Linux/Mac训练 YOLOv8 算法项目 《芒果 YOLOv8 目标检测算法 改进》 适用于芒果专栏改进 YOLOv8 算法 文章目录 官方 YOLOv8 算法介绍改进网络代码汇总第一步 配置环境1.1 系列配…

山体滑坡监测预警系统-gnss位移监测站

GNSS山体滑坡位移监测站是一种利用全球导航卫星系统(GNSS)进行山体滑坡位移监测的设备。它通过接收和处理GNSS卫星信号,能够实时监测山体的位移变化,并将数据传输到后端系统进行分析和处理。 GNSS山体滑坡位移监测站具有高精度、…

VUE+Vis.js鼠标悬浮title提前显示BUG解决方法

在使用VUEVis.js做拓扑图,利用鼠标悬浮放在图标展示设备信息时,发现鼠标一放在图标上面时,标题表会提前在放置的元素下显示,鼠标再放到图标上去元素才会隐藏变成悬浮状态 解决方法: 添加一个div元素,设置v…

一文掌握全方位构建 ECS 安全体系的最佳方法

云布道师 2024 开年伊始,阿里云弹性计算团队全新推出新一季【ECS 安全季】,通过分享云上安全体系相关产品与最佳实践,让用户快速上手构建业务的安全防护能力。 首节课程《如何全方位构建 ECS 的安全体系》由阿里云弹性计算高级产品专家马小…

Spring Boot Aop 执行顺序

Spring Boot Aop 执行顺序 1. 概述 在 spring boot 项目中,使用 aop 增强,不仅可以很优雅地扩展功能,还可以让一写多用,避免写重复代码,例如:记录接口耗时,记录接口日志,接口权限&…

CSS实现文本和图片无限滚动动画

Demo图如下&#xff1a; <style>* {margin: 0;padding: 0;box-sizing: border-box;font-family: Poppins, sans-serif;}body {min-height: 100vh;background-color: rgb(11, 11, 11);color: #fff;display: flex;flex-direction: column;justify-content: center;align-i…

CSS基本知识总结

目录 一、CSS语法 二、CSS选择器 三、CSS样式表 1.外部样式表 2.内部样式表 3.内联样式 四、CSS背景 1.背景颜色&#xff1a;background-color 2.背景图片&#xff1a;background-image 3.背景大小&#xff1a;background-size 4.背景图片是否重复&#xff1a;backg…

vulnhub靶机bluemoon

下载地址&#xff1a;https: //download.vulnhub.com/bluemoon/bluemoon.ova 主机发现 目标169 端口扫描 服务扫描 看一下web 扫描一下web 看一下 thank you是一个链接 二维码 连接ssh的脚本 两个文件看一下 说白了就是给了我们一个字典 九头蛇 搞定登入 前面看到是docker就用…

接口测试 03 -- 接口自动化思维 Requests库应用

1. 接口自动化思维梳理 1.1接口自动化的优点 接口测试自动化&#xff0c;简单来讲就是功能测试用例脚本化然后执行脚本&#xff0c;产生一份可视化测试报告。不管什么样的测试方式&#xff0c;都是为了验证功能与发现 BUG。那为什么要做接口测试自动化呢&#xff1f;一句话概括…

Xcode 15 libarclite 缺失问题

升级到Xcode 15运行项目报错&#xff0c;报错信息如下&#xff1a; SDK does not contain libarclite at the path /Applications/Xcode.app/Contents/Developer/Toolchains/XcodeDefault.xctoolchain/usr/lib/arc/libarclite_iphonesimulator.a; try increasing the minimum d…

web安全学习笔记【05】——反弹Shell、正反向连接

思维导图 #知识点&#xff1a; 1、Web常规-系统&中间件&数据库&源码等 2、Web其他-前后端&软件&Docker&分配站等 3、Web拓展-CDN&WAF&OSS&反向&负载均衡等 ----------------------------------- 1、APP架构-封装&原生态&H5&am…

分布式定时任务系列8:XXL-job源码分析之远程调用

传送门 分布式定时任务系列1&#xff1a;XXL-job安装 分布式定时任务系列2&#xff1a;XXL-job使用 分布式定时任务系列3&#xff1a;任务执行引擎设计 分布式定时任务系列4&#xff1a;任务执行引擎设计续 分布式定时任务系列5&#xff1a;XXL-job中blockingQueue的应用 …

鸿蒙开发案例002

1、目标需求 界面有增大字体按钮&#xff0c;每次点击增大字体按钮&#xff0c;“Hello ArkTS”都会变大 2、源代码 Entry Component struct Page {textValue: string Hello ArkTSState textSize: number 50myClick():void{this.textSize 4}build() {Row() {Column() {//…

【Linux】常见指令(二)

前言 常见指令第二部分。 文章目录 一、指令&#xff08;下&#xff09;重定向>&#xff1a;输出重定向>>&#xff1a;追加输出<&#xff1a;输入重定向 10. more—显示文本文件内容11.less—逐屏浏览文本文件内容12. head13. tail管道 |14. date—时间指令在这里插…

基于Java SSM框架实现在线学习系统项目【项目源码+论文说明】计算机毕业设计

基于java的SSM框架实现在线学习系统演示 摘要 本论文主要论述了如何使用JAVA语言开发一个在线学习系统 &#xff0c;本系统将严格按照软件开发流程进行各个阶段的工作&#xff0c;采用B/S架构&#xff0c;面向对象编程思想进行项目开发。在引言中&#xff0c;作者将论述在线学…