Shell编程之条件测试、if语句、case语句

条件语句

  • 一、条件测试
    • 1.1 测试命令
    • 1.1 文件测试
    • 1.2 整数比较
    • 1.3 字符串比较
    • 1.4 逻辑测试
      • 1.4.1 逻辑与 &&
      • 1.4.2 逻辑或 ||
    • 1.4.3 组合应用
    • 1.5 多个命令组合执行 ( ) { }
  • 二、if语句
    • 2.1单分支结构
    • 2.2 多分支结构
    • 2.4 if语句练习
      • 2.4.1 单分支
      • 2.4.2 简单的交互式分数反馈
  • 三、case语句
    • 3.1 case语句结构
    • 3.2 case语句练习
  • 四、echo命令详解

一、条件测试

1.1 测试命令

格式1:test 条件表达式
格式2:[ 条件表达式 ]

test命令和 [    ] 相同,建议使用[   ] 
#方框中要空格
#用test可能会不小心定义变量 

1.1 文件测试

常见的测试操作符含义
-d测试是否为目录(directory)
-f测试是否为文件(File)
-L测试是否为软连接文件
-r测试当前用户是否有读取权限(Read)
-w测试当前用户是否有写入权限(Write)
-x测试当前用户是否有执行权限(eXcute)
-e测试目录或文件是否存在(Exist)
属性测试
-s FILE是否存在且非空
-t fd文件描述符是否在某终端已经打开
-N FILE文件自从上一次被读取之后是否被修改过
-O FILE当前有效用户是否为文件属主
-G FILE当前有效用户是否为文件属组

示例一:测试文件类型

  1. 目录文件 -d
    在这里插入图片描述
  2. 普通文件 -f
    在这里插入图片描述
  3. 软连接文件 -L
    在这里插入图片描述

示例二:权限测试

  1. 读权限 -r
    在这里插入图片描述

  2. 写权限 -w
    在这里插入图片描述

  3. 执行权限 -x
    在这里插入图片描述

1.2 整数比较

只能用于整数

#格式#
[ 整数1 操作符 整数2 ]
常用操作符含义
-eq第一个数等于(Equal)第二个数
-ne第一个数不等于(Not Equal)第二个数
-gt第一个数大于(Greater Than)第二个数
-lt第一个数小于(Lesser Than)第二个数
-le第一个数小于或等于(Lesser or Equal)第二个数
-ge第一个数大于或等于(Greater or Equal)第二个数

示例:磁盘已用率过高示警(不考虑光驱)

[root@byyd test]#disk=`df -h | awk '{print $5}'  | tail -n  +2  |head -n -1 | sort -rn |head -n 1| tr -d % `
//仅显示磁盘已用率,并将值赋予变量disk
[root@byyd test]#[ $disk -ge 90 ] && echo "磁盘快满了,记得清理"|| echo "能用的还有很多"
//如果大于或者等于90 则示警
//如果小于90,则提示不用清理

在这里插入图片描述

1.3 字符串比较

记得加空格

#格式#
[ 字符串1 = 字符串2 ] 			#判断是否相等
[ 字符串1 != 字符串2 ] 			#判断是否不等
[ -z 字符串 ]                     #判断字符串内容是否为空
操作符含义
=字符串内容相同
!=字符串内容不同,! 号表示相反的意思
-z字符串内容为
-n字符是否存在

示例

#一个简单的shell脚本 
#!/bin/bash
read -p "请做出你的选择:" choice

if [ $choice = "fff" ]                                                                   
then
echo "a"
else
echo "cc"
fi          

在这里插入图片描述

1.4 逻辑测试

#格式#
[ 表达式1 ] 操作符 [ 表达式2 ]
   命令1    操作符   命令2
操作符含义
-a或&&逻辑与,全真才为真
-o逻辑或,一真即为真
!逻辑否

1.4.1 逻辑与 &&

CMD1 && CMD2     
#同时满足命令1 和命令2 的要求  才会返回正确 ,输出命令2的结果

全真才为真  一假即为假      
第一个CMD1结果为真 ,第二个CMD2必须要参与运算,才能得到最终的结果

第一个CMD1结果为假 ,总的结果必定为假,因此不需要执行CMD2

在这里插入图片描述
在这里插入图片描述

1.4.2 逻辑或 ||

CMD1 || CMD2
#命令1满足要求,直接输出命令1的结果,不需要命令2参与
#如果命令1不满足要求,命令2满足,会输出命令2的结果

一真即为真
第一个CMD1结果为真 (1),总的结果必定为1,因此不需要执行CMD2
第一个CMD1结果为假 (0),第二个CMD2 必须要参与运算,才能得到最终的结果

在这里插入图片描述

1.4.3 组合应用

用法只有一种 

cmd1 && cmd2  || cmd3   

#短路与必须在短路或前

在这里插入图片描述

1.5 多个命令组合执行 ( ) { }

()会开启子shell

{ } 不会开启子shell
( cmd1; cmd2; ... )

{ cmd1; cmd2 ; cmd3 }

#{}和 () 中要加空格
#多条命令要用; 隔开

在这里插入图片描述

二、if语句

2.1单分支结构

在这里插入图片描述

#单分支格式#

if [  判断条件  ]
then ; echo "  "
else
echo "   "
fi

2.2 多分支结构

在这里插入图片描述

#多分支#

if [ 判断   ]
then 
echo "  "
elif[   ] #可以无限elif 
if
...

fi

else #以上条件都为假
echo "   "

fi
# if 和 fi要对应

2.4 if语句练习

2.4.1 单分支

#!/bin/bash

# 定义一个变量
read -p "请输入你的年龄:" age  

if [ $age -ge 18 ]
then
    echo "你已经成年了!"
else
    echo "你还未成年!"
fi

在这里插入图片描述

2.4.2 简单的交互式分数反馈

vim results.sh #新建脚本文件

#!/bin/bash
read -p "请输入你的输入分数(0-100):" num

if [ $num -ge 85 -a $num -le 100 ]
then
echo "你真厉害"
elif [ $num -ge 70 -a $num -le 84 ]
then
echo "你很棒了"
elif [ $num -ge 0 -a $num -lt 70 ]
then
echo "你仍需努力"
else
echo "你输错了,重新输"

bash $0

fi

在这里插入图片描述

三、case语句

3.1 case语句结构

#基本结构#
case 变量名 in
    值1)
        # 匹配值1时执行的代码块
        ;;
    值2)
        # 匹配值2时执行的代码块
        ;;
    值3)
        # 匹配值3时执行的代码块
        ;;
    *)
        # 不匹配任何值时执行的代码块,类似于default语句
        ;;
esac
case支持glob风格的通配符:
* 任意长度任意字符
? 任意单个字符
[0-9] 指定范围内的任意单个字符
|   或者,如: a|b
#可以用嵌套结构#
case 变量名 in
    值1)
    case 变量名 in
      值a)
      ....
      ;;
      值b)
      ....
      ;;
      *)
      ....
      ;;
      esac
      ;;
    值2)
    ....
        ;;
    *)
       ....
        ;;
esac

#一个case就要有一个esac对应

3.2 case语句练习

#!/bin/bash

# 定义一个变量
read -p "这是什么水果:" fruit

case $fruit in
    "apple")
        echo "这是一个苹果"
        ;;
    "orange")
        echo "这是一个橘子"
        ;;
    "banana")
        echo "这是一个香蕉"
        ;;
    *)
        echo "这是其他水果"
        ;;
esac

在这里插入图片描述

四、echo命令详解

echo命令

echo -n   表示不换行输出
echo -e   表示输出转义符
常用的转义符
选项作用
\r光标移至行首,并且不换行
\s当前shell的名称,如bash
\t插入Tab键,制表符
\n输出换行
\f换行,但光标仍停留在原处
\表示插入"\"本身转义
\b表示退格 不显示前一个字符
\c抑制更多的输出或不换行
#自动磁盘分区#
#以/dev/sdb 为例
echo -e "n\n\n\n\n\nw" | fdisk /dev/sdb

在这里插入图片描述

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

如若内容造成侵权/违法违规/事实不符,请联系我们进行投诉反馈qq邮箱809451989@qq.com,一经查实,立即删除!

相关文章

元宇宙核能发电VR模拟仿真实训教学为建设新型电力系统提供重要支撑

随着“碳达峰、碳中和”目标与建设新型能源体系的提出,在元宇宙环境下建设电力系统是未来发展的趋势。以物联网、区块链、数字孪生、混合现实等技术为主要代表的元宇宙技术体系及其在电力和能源系统中的应用,将会促进智能电网的发展,为建设新…

VR安全宣传系列:防触电虚拟现实体验

在电气工作中,安全问题始终是重中之重。为了更好地提高公众的电气安全意识和技能,广州华锐互动开发了一种基于虚拟现实技术的模拟系统——VR防触电虚拟体验系统。这种系统可以模拟各种因操作不当导致的触电事故场景,并提供沉浸式的体验&#…

利用OpenSSL实现私有 CA 搭建和证书颁发

利用OpenSSL实现私有 CA 搭建和证书颁发 一、私有 CA 搭建1. 安装openssl2. 配置 openssl3. 生成 CA 自己的私钥4. 生成 CA 自己的自签证书5. 验证自签证书 二、向私有CA申请证书流程1. 生成应用私钥文件2. 根据应用私钥生成证书申请文件3. 向CA请求颁发证书4. 验证应用证书5. …

2022年09月 C/C++(一级)真题解析#中国电子学会#全国青少年软件编程等级考试

第1题&#xff1a;指定顺序输出 依次输入3个整数a、b、c,将他们以c、a、b的顺序输出。 时间限制&#xff1a;1000 内存限制&#xff1a;65536 输入 一行3个整数a、b、c&#xff0c;以空格分隔。 0 < a,b,c < 108 输出 一行3个整数c、a、b&#xff0c;整数之间以一个空格分…

腾讯云服务器标准型CVM实例详细介绍S5/S6/SA2/SR1/SA3/S4等

腾讯云CVM服务器标准型实例的各项性能参数平衡&#xff0c;标准型云服务器适用于大多数常规业务&#xff0c;例如&#xff1a;web网站及中间件等&#xff0c;常见的标准型云服务器有CVM标准型S5、S6、SA3、SR1、S5se等规格&#xff0c;腾讯云服务器网来详细说下云服务器CVM标准…

使用sqlplus连接oracle,提示ORA-01034和ORA-27101

具体内容如下 PL/SQL Developer 处 登录时 终端处 登录时 ERROR: ORA-01034: ORACLE not available ORA-27101: shared memory realm does not exist Process ID: 0 Session ID: 0 Serial number: 0 解决方法是执行以下命令 sqlplus /nolog conn / as sysdba startup …

0001nginx简介、相关模型与原理

文章目录 一. 什么是Nginx二. ngnix的一些模型1、nginx的进程模型2、worker的抢占&#xff08;锁&#xff09;机制模型3. nginx事件处理模型 三. nginx加载静态资源的过程 一. 什么是Nginx Nginx是一个高性能HTTP反向代理服务器&#xff0c;以下是nginx的相关能力 反向代理&am…

JDK 8 升级 JDK 17 全流程教学指南

JDK 8 升级 JDK 17 首先已有项目升级是会经历一个较长的调试和自测过程来保证允许和兼容没有问题。先说几个重要的点 遇到问题别放弃仔细阅读报错&#xff0c;精确到每个单词每一行&#xff0c;不是自己项目的代码也要点进去看看源码到底是为啥报错明确你项目引入的包&#x…

【Transformer】自注意力机制Self-Attention | 各种网络归一化Normalization

1. Transformer 由来 & 特点 1.1 从NLP领域内诞生 "Transformer"是一种深度学习模型&#xff0c;首次在"Attention is All You Need"这篇论文中被提出&#xff0c;已经成为自然语言处理&#xff08;NLP&#xff09;领域的重要基石。这是因为Transfor…

word横向页面侧面页码设置及转pdf后横线变竖线的解决方案

在处理材料的时候&#xff0c;会遇到同一个文档里自某一页开始&#xff0c;页面布局是横向的&#xff0c;这时候页码要设置在侧面&#xff0c;方法是双击页脚&#xff0c;然后在word工具栏上选择“插入”——>“文本框”——>“绘制竖版文本框”&#xff0c;然后在页面左…

C++小游戏贪吃蛇源码

graphics.h是针对DOS下的一个C语言图形库 (c也可以) 目前支持下载此头文件的常用的有两种: 1. EGE (Easy Graphics Engine)2. EasyX Graphics LibraryEGE, 全名Easy Graphics Engine, 是windows下的简易绘图库&#xff0c;是一个类似BGI(graphics.h)的面向C/C语言新手的图形库…

P11-Transformer学习1.1-《Attention Is All You Need》

Transformer目录:《Transformer Paper》1.0 CV Transformer必读论文5篇_汉卿HanQ的博客-CSDN博客 前文参考:Transformer1.0-预热_汉卿HanQ的博客-CSDN博客 全文1w3字左右&#xff0c;按照论文翻译个人理解精读&#xff0c;如果对你有所帮助&#xff0c;欢迎点个赞哦&#xff…

springboot基础

springboot基础 一、springboot课程介绍 Spring Boot 提供一种快速使用spring的方式&#xff0c;基于约定大于配置的思想&#xff0c;可以让开发者不必在配置与逻辑业务中来回进行思维切换&#xff0c;全身心的投入到业务的代码编写中&#xff0c;从而大大提高了开发效率。20…

2022年12月 C/C++(一级)真题解析#中国电子学会#全国青少年软件编程等级考试

第1题&#xff1a;加一 输入一个整数x&#xff0c;输出这个整数加1后的值&#xff0c;即x1的值。 时间限制&#xff1a;1000 内存限制&#xff1a;65536 输入 一个整数x(0 ≤ x ≤ 1000)。 输出 按题目要求输出一个整数。 样例输入 9 样例输出 10 以下是使用C语言编写的解决方案…

Shell编程之正则表达式(非常详细)

正则表达式 1.通配符和正则表达式的区别2.基本正则表达式2.1 元字符 &#xff08;字符匹配)2.2 表示匹配次数2.4 位置锚定2.5 分组 和 或者 3.扩展正则表达式4.部分文本处理工具4.1 tr 命令4.2 cut命令4.3 sort命令4.4 uniq命令 1.通配符和正则表达式的区别 通配符一般用于文件…

Linux系统下安装Git软件

环境说明 Linux系统&#xff1a;CentOS 7.9 安装GCC等 JDK版本&#xff1a;jdk-8u202-linux-x64.tar.gz Maven版本&#xff1a;apache-maven-3.8.8-bin.tar.gz 在以上环境下安装Git&#xff08;git-2.41.0.tar.gz&#xff09;软件。 查看是否安装Git软件 查看Git版本&#…

【Linux】以太网协议——数据链路层

链路层解决的问题 IP拥有将数据跨网络从一台主机送到另一台主机的能力&#xff0c;但IP并不能保证每次都能够将数据可靠的送到对端主机&#xff0c;因此IP需要上层TCP为其提供可靠性保证&#xff0c;比如数据丢包后TCP可以让IP重新发送数据&#xff0c;最终在TCP提供的可靠性机…

标记垃圾,有三种色彩:四千长文带你深入了解三色标记算法

&#x1f52d; 嗨&#xff0c;您好 &#x1f44b; 我是 vnjohn&#xff0c;在互联网企业担任 Java 开发&#xff0c;CSDN 优质创作者 &#x1f4d6; 推荐专栏&#xff1a;Spring、MySQL、Nacos、Java&#xff0c;后续其他专栏会持续优化更新迭代 &#x1f332;文章所在专栏&…

ArcGIS Maps SDK for JavaScript系列之一:在Vue3中加载ArcGIS地图

目录 ArcGIS Maps SDK for JavaScript简介ArcGIS Maps SDK for JavaScript 4.x 的主要特点和功能AMD modules 和 ES modules两种方式比较Vue3中使用ArcGIS Maps SDK for JavaScript的步骤创建 Vue 3 项目安装 ArcGIS Maps SDK for JavaScript创建地图组件 ArcGIS Maps SDK for …

Java多线程知识点,看这一篇就够了!(超详细)

目录 一、认识线程&#xff08;Thread&#xff09; 1、概念 2、第一个多线程程序 &#xff08;1&#xff09;观察线程 3、创建线程 二、Thread 类及常见方法 1、Thread 的常见构造方法 2、Thread 的几个常见属性 3、启动一个线程&#xff1a;start 4、终止一个线程 &…