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 "请做出你的选择:" choiceif [ $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
...fielse #以上条件都为假
echo "   "fi
# if 和 fi要对应

2.4 if语句练习

2.4.1 单分支

#!/bin/bash# 定义一个变量
read -p "请输入你的年龄:" age  if [ $age -ge 18 ]
thenecho "你已经成年了!"
elseecho "你还未成年!"
fi

在这里插入图片描述

2.4.2 简单的交互式分数反馈

vim results.sh #新建脚本文件#!/bin/bash
read -p "请输入你的输入分数(0-100):" numif [ $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 $0fi

在这里插入图片描述

三、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 "这是什么水果:" fruitcase $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

在这里插入图片描述

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

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

相关文章

Qt 编译程序打包依赖库

windows环境 使用windeployqt.exe 打包 # 进入exe目录,执行windeployqt命令,注意Qt的安装目录 D:\Qt\Qt5.9.6\5.9.6\mingw53_32\bin\windeployqt.exe my.exelinux环境 使用ldd命令打包 #!/bin/bash LibDir$PWD"/lib" Tag$1 lib_array($(ld…

使用 Flask 部署 Next.js

原文 使用 Flask 部署 Next.js Flask 和 Next.js 是两个独特的开源 Web 框架,分别构建在 Python 和 JavaScript 编程语言之上。 您可以在没有 Next.js 的情况下构建 Flask 应用程序,也可以在没有 Flask 的情况下构建 Next.js 应用程序。但是&#xff0…

ubuntu切换python版本

在没有安装类似anoconda的管理工具的时候,我们常常会被Ubuntu下的Python版本切换问题所头疼。 可以使用update-alternatives工具进行python版本的任意切换 当使用update-alternatives工具来切换Ubuntu系统上的Python版本时,您实际上是在系统范围内选择…

PyTorch翻译官网教程-NLP FROM SCRATCH: CLASSIFYING NAMES WITH A CHARACTER-LEVEL RNN

官网链接 NLP From Scratch: Classifying Names with a Character-Level RNN — PyTorch Tutorials 2.0.1cu117 documentation 使用CHARACTER-LEVEL RNN 对名字分类 我们将建立和训练一个基本的字符级递归神经网络(RNN)来分类单词。本教程以及另外两个“from scratch”的自然…

【国赛清单】2023全国大学生电赛综合测试【总结】

综合测评简介 (1)综合测评是全国大学生电子设计竞赛评审工作中非常重要的一个环节,是“一次竞赛二级评审”工作中全国专家组评审工作的一部分。 (2)测试对象为赛区推荐上报全国评奖的优秀参赛队全体队员,…

轻松转换TS视频为MP4,实现优质视频剪辑体验

如果你是一个视频剪辑爱好者,你一定会遇到各种视频格式之间的转换问题,特别是将TS视频转换为MP4格式。别担心,我们的视频剪辑软件将为你提供最简单、高效的解决方案! 首先第一步,我们要进入媒体梦工厂主页面&#xff…

Elasticsearch同时使用should和must

问题及解决方法 must和should组合查询,should失效。使用must嵌套查询,将should组成的bool查询包含在其中一个must查询中。 SearchRequest request new SearchRequest(); request.indices("function_log");SearchSourceBuilder sourceBuilde…

XLua案例学习

下载 xlua 之后把 asset 文件中的全部文件粘贴到项目文件Asset文件下,将tool粘贴到 asset 同级目录下 然后把 HOTFIX_ENABLE 宏打开 之后 编辑 lua 脚本 更改源代码之后先 Generate Code 然后 HotFix inject in Editor 开发过程: 首先开发业务…

C语言预处理命令

编译预处理指令:对源程序编译之前做一些处理,生成扩展C源程序 1、种类: 宏定义 #define文件包含 #include条件编译 #if–#else–#endif等 2、格式: “#”开头占单独书写行语句尾不加分号 3、宏定义 在C语言源程序中允许用一…

掌握Python的X篇_32_使用python编辑pdf文件_pdfrw

本篇介绍利用python操作pdf文件,我们平时也会有合并和拆分pdf的需求,此时我们就可以使用本节内容。 文章目录 1. pdfrw的安装2. 切分pdf文件3. pdfrw官网及实现一版四面的实例 1. pdfrw的安装 pip install pdfrw官网地址:https://github.co…

【设计模式】装饰器模式

装饰器模式(Decorator Pattern)允许向一个现有的对象添加新的功能,同时又不改变其结构。这种类型的设计模式属于结构型模式,它是作为现有的类的一个包装。 装饰器模式通过将对象包装在装饰器类中,以便动态地修改其行为…

如何在Linux中查找Nginx安装目录

一、通过which命令查找 $ which nginx /usr/sbin/nginxwhich命令会在系统环境变量PATH中查找nginx可执行文件,并返回路径。因此,通过which命令可以很容易地找到系统中nginx的安装位置。 二、通过whereis命令查找 $ whereis nginx nginx: /usr/sbin/ng…

51单片机(普中HC6800-EM3 V3.0)实验例程软件分析 实验六 静态数码管显示

目录 前言 一、原理图及知识点介绍 1.1、数码管原理图: 二、代码分析 前言 第一个实验: 51单片机(普中HC6800-EM3 V3.0)实验例程软件分析 实验一 点亮第一个LED_ManGo CHEN的博客-CSDN博客 第二个实验:51单片机&am…

计算机竞赛 LSTM的预测算法 - 股票预测 天气预测 房价预测

0 简介 今天学长向大家介绍LSTM基础 基于LSTM的预测算法 - 股票预测 天气预测 房价预测 这是一个较为新颖的竞赛课题方向,学长非常推荐! 🧿 更多资料, 项目分享: https://gitee.com/dancheng-senior/postgraduate 1 基于 Ke…

Java进阶-Oracle(二十)(1)

🌻🌻 目录 一、Oracle 数据库介绍1、Oracle 的概述2、Oracle 的结构2、Oracle的功能 二、安装与卸载1、卸载2、安装 三、使用(需要关注得只有下面这两个)四、PLSQL 的简单使用五、DBeaver 的简单使用 一、Oracle 数据库介绍 1、O…

【深度学习】遗传算法[选择、交叉、变异、初始化种群、迭代优化、几何规划排序选择、线性交叉、非均匀变异]

目录 一、遗传算法二、遗传算法概述2.1 选择2.2 交叉2.3 变异 三、遗传算法的基本步骤3.1 编码3.2 初始群体的生成3.3 适应度评估3.4 选择3.5 交叉3.6 变异3.7 总结 四、遗传算法工具箱4.1 initializega4.2 ga4.3 normGeomSelect4.4 arithXover4.5 nonUnifMutation 五、遗传算法…

ASL国产CS5213 转VGA信号输出音频 替代AG6200安格芯片 HDMI to VGA(带音频)方案设计原理图

CS5213功能:HDMI转VGA带音频输出,专注于设计HDMI转VGA带音频输出。可替代AG6200 AG6201。 CS5213芯片是一个HDMI(高清多媒体接口)到VGA桥接芯片。 它将HDMI信号转换为标准VGA信号它可以在适配器、智能电缆等设备中设计。 Capst…

JAVA 实训报告心得体会

一开始想做计算器那个课题,原因很简单,就是因为我感觉那个课题很简 单,在百度里一搜就搜到了一模一样的源程序。只是感觉没什么意思,那个界面也 不是很好看,又不好玩。所以就做了现在这个猜数游戏。一直想编个游戏程序…

【数据结构与算法】分治算法

分治算法 介绍 分治法是一种很重要的算法,字面意思的解释是“分而治之”,就是把一个复杂的问题分成两个或更多的相同或相似的子问题,再把子问题分成更小的子问题…直到最后子问题可以简单的直接求解,原问题的解即子问题解的合并…

前端接口修改工具 Requestly具体操作

更新于2023年8月12日18:17:56,插件版本可能会变,界面可能会有所变化 插件下载地址:https://chrome.google.com/webstore/detail/requestly-open-source-htt/mdnleldcmiljblolnjhpnblkcekpdkpa 注意,必须用谷歌浏览器,…