shell条件语句

一.条件测试

1.三种测试方法

①test命令测试

②[   ]测试(注意前后需要有空格)

③[[   ]]:加强版[   ],测试支持通配符(匹配字符串)和正则表达式

二.条件语句

2.1 test命令

测试特定的表达式是否成立,当条件成立,测试语句的返回值为0,否则为非0.

格式:
test 条件表达式
或 [ 条件表达式 ]  (条件表达式的两边都需要有空格,且此方法更为常用)
选项含义
-d测试是否为目录
-e测试目录或文件是否存在
-f测试是否为文件
-r测试当前用户是否有权限读取
-w测试当前用户是否有权限写入
-x测试当前用户是否有权限执行
-L测试是否为软连接文件
-nt判断文件A是否比文件B新
-ot判断文件A是否比文件B旧
-ef判断两个文件是否为同一文件

示例1

2.2 整数值比较
格式:
[ 整数1 操作符 整数2 ]
操作符含义
-eq等于(Equal)
-ne不等于(Not Equal)
-lt小于(Leser Than)
-gt大于(Greater Than)
-le小于或等于(Lesser or Equal)
-ge大于或等于(Greater or Equal)

示例1:比较两个整数大小

示例2:查询当前目录下的文件数是否大于10,如果大于,则进行提示

示例3: 查看系统内存是否低于1024M,如果低于则提示

2.3 字符串比较
格式:
[ "字符串1" = "字符串2" ] 			#判断是否相等
[ "字符串1" != "字符串2" ] 			#判断是否不等
[ -z "字符串" ]                     #判断字符串内容是否为空
[ -n "字符串" ]                     #判断字符是否存在

2.4 逻辑测试(短路运算)
格式:
[ 表达式1 ]  操作符 [ 表达式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语句

格式:
if [ 条件判断式 ]; then#当条件判断成立时,可以进行的命令工作内容
fi 					#这里将if反过来写,结束if语句的意思
2.双分支结构
格式:
if 判断条件
then条件为真的分支代码else条件为假的分支代码fi
3.多分支结构
格式:
if [ 条件判断式 ]
then当条件判断成立时,可以进行的命令工作内容
elif [ 条件判断式二 ]
then当条件判断成立时,可以进行的命令工作内容
else	当上面的条件判断都不成立时,可以进行的命令工作内容
fi 		

实例:学生输入分数判断自己的成绩是优秀(91-100)、良好(81-90)、及格(60-80)、不及格(小于60)

vim fs.sh                          #创建脚本文件,注意必须.sh结尾
脚本内容:
#!/bin/bash                       #脚本解释器
read -p  "请输入你的成绩进行判断(0-100): " key  #读取用户输入的内容为变量key
if [ $key -ge 91 -a  $key -le 100   ]       #条件1:如果key大于等于91且小于等于100则执行then 
then                                        #key符合条件1执行此then
echo "你的成绩为优秀"
elif [ $key -ge 81 -a $key -le 90    ]      #条件2:如果key大于等于81且小于等于90则执行then
then                                        #key符合条件2执行此then
echo "你的成绩为良好"
elif [ $key -ge 60 -a $key -le 80    ]      #条件3:如果key大于等于60且小于等于80则执行then
then                                        #key符合条件3执行此then
echo "你的成绩为及格"
elif [ $key -lt 60  ]                       #条件4:如果key大于等于60且小于等于80则执行then
then                                        #key符合条件4执行此then
echo "你的成绩为不及格"                  
else                                        #key不符合上述任何条件则执行else
echo "输入错误,请输入0-100的正整数"
fi                                          #结束语fi
chmod +x fs.sh                     #脚本添加执行权限
bash   fs.sh                       #使用shell执行脚本,也可使用路径方式执行

三.case语句

1、使用格式

case   变量引用     in

PAT1)    符合条件1执行分支1的命令,PAT1可以使用通配符

分支1命令

;;   每个分支结束的固定格式

PAT2)    符合条件1执行分支2的命令,PAT2可以使用通配符

分支2命令

;;   每个分支结束的固定格式,可以有多个分支

*) 不符合其他任意分支的默认分支

默认分支命令

;; 分支结束的固定格式

esac   case语句结束标志

注意点:

  • 双分号";;"表示命令序列的结束

  • 模式字符串中,可以用方括号表示一个连续的范围,如"[0-9]";还可以使用竖杠|表示或,比如a|b

2.实例
vim case.sh     #创建case.sh脚本
case.sh脚本内容:
#!/bin/bash                   #shell声明
cat <<EOF                     #cat多行重定向
1.关闭防火墙                   #将1,2,3内容打印出来
2.临时关闭selinux
3.查看当前用户
EOF                           #多行重定向结束
read -p "请选择操作内容(1-3):" key   #读取用户输入内容为变量key
case $key  in                 #case判断 变量$key   
1)                            #若$key等于1则执行1)内容     
systemctl stop firewalld;     #临时关闭防火墙命令
;;                            #每个分支结束符
2)                            #若$key等于2则执行2)内容
setenforce 0;                 #临时关闭selinux
;;                            #每个分支结束符
3)                            #若$key等于3则执行3)内容
user=`whoami`                 #定义变量user调用whoami命令执行结果反向单引号调用
echo "当前用户为$user"         #输出内容当前用户为$user
;; 
*)                            #若$key不满足上述任一条件则执行默认内容*)
echo "输出错误,请输入1-3进行选择"
esac                          #case语句结束标志
chmod  +x case.sh             #脚本添加可执行权限
bash     case.sh              #通过shell执行脚本  

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

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

相关文章

谷歌浏览器任意文件访问漏洞(CVE-2023-4357)复现

1.漏洞级别 高危 2.漏洞描述 该漏洞的存在是由于 Google Chrome中未充分验证 XML 中不受信任的输入。远程攻击者可利用该漏洞通过构建的 HTML 页面绕过文件访问限制&#xff0c;导致chrome任意文件读取。 总结&#xff1a;一个XXE漏洞 3.利用范围 Google Chrome < 116.…

[架构之路-248]:目标系统 - 设计方法 - 软件工程 - 需求工程- 需求开发:如何用图形表达需求,结构化需求分析与面向对象需求分析的比较与融合

目录 前言&#xff1a; 一、结构化和面向对象方法上的区别 二、结构化与面向对象分析方法优缺点比较 三、结构化方法与面向对象方法的融合使用 四、结构化方法与面向对象方法的相辅相成完成软件开发 前言&#xff1a; 结构化软件开发方法和面向对象的软件开发方法&#x…

【Linux入侵日志排查】

在Linux系统中&#xff0c;不同的服务和应用程序可能会产生不同格式的日志记录。以下是一些常见类型的日志文件及其格式说明&#xff1a; 以下是一些常见的 Linux 日志字段格式说明&#xff0c;以及具体的示例&#xff1a; /var/log/auth.log&#xff1a;此日志文件包含与身份…

px4+vio实现无人机室内定位

文章主要讲述px4 如何利用vins_fusion里程计数据实现在室内定位功能。 文章基于以下软、硬件展开。 硬件软件机载电脑&#xff1a; Intel NUC系统&#xff1a;Ubuntu 20.04相机&#xff1a; Intel Realsense D435iros&#xff1a;noetic飞控&#xff1a;Pixhawk 2.4.8固件&am…

音视频项目—基于FFmpeg和SDL的音视频播放器解析(十七)

介绍 在本系列&#xff0c;我打算花大篇幅讲解我的 gitee 项目音视频播放器&#xff0c;在这个项目&#xff0c;您可以学到音视频解封装&#xff0c;解码&#xff0c;SDL渲染相关的知识。您对源代码感兴趣的话&#xff0c;请查看基于FFmpeg和SDL的音视频播放器 如果您不理解本…

[EFI]ASUS EX-B365M-V5 Gold G5400 CPU电脑 Hackintosh 黑苹果引导文件

硬件型号驱动情况主板ASUS EX-B365M-V5处理器Intel(R) Pentium(R) Gold G5400 CPU已驱动内存8GB Kingmax Dual Channel已驱动硬盘Vaseky V800 128GB SATA已驱动显卡Radeon RX 560已驱动声卡Realtek ALC887已驱动网卡RTL8111已驱动无线网卡蓝牙Killer(R) Wi-Fi 6 AX1650需要自行…

服务器系列之 成功解决 com.jcraft.jsch.JSchException: Auth fail

我 | 在这里 &#x1f575;️ 读书 | 长沙 ⭐软件工程 ⭐ 本科 &#x1f3e0; 工作 | 广州 ⭐ Java 全栈开发&#xff08;软件工程师&#xff09; &#x1f383; 爱好 | 研究技术、旅游、阅读、运动、喜欢流行歌曲 &#x1f3f7;️ 标签 | 男 自律狂人 目标明确 责任心强 ✈️公…

如何使用rclone将腾讯云COS桶中的数据同步到华为云OBS

在多云策略与数据迁移趋势下&#xff0c;企业往往需要将数据在不同云服务提供商之间进行迁移。本文介绍如何使用rclone工具同步腾讯云COS&#xff08;Cloud Object Storage&#xff09;桶中的数据到华为云OBS&#xff08;Object Storage Service&#xff09;。先决条件是您已经…

【SQL SERVER】序列

原来sqlserver也能用序列呀&#xff0c;我原来以为只有oracle有呢 浅薄了~ 创建序列 CREATE SEQUENCE A_SequenceSTART WITH 1INCREMENT BY 1;使用序列 oracle使用序列是A_Sequence.NEXTVAL&#xff0c;而sqlserver是NEXT VALUE FOR A_Sequence CREATE TABLE A_TABLE (ID IN…

PAT甲级 1023 高精度

1023 Have Fun with Numbers 分数 20 Notice that the number 123456789 is a 9-digit number consisting exactly the numbers from 1 to 9, with no duplication. Double it we will obtain 246913578, which happens to be another 9-digit number consisting exactly the…

vb圣经加注释

Imports System.Data.OleDbPublic Class Form1小目录简写Dim jiuyue As String() {"创", "出", "利", "民", "申", "书", "士", "得", "撒上", "撒下", "王上&quo…

Python---函数的应用案例(多个)

案例&#xff1a;使用print方法打印一条横线 print(- * 40) 案例&#xff1a;对上个案例进行升级&#xff0c;可以根据输入的num数值&#xff0c;生成指定数量的横线 def print_lines(num, length):""" print_lines函数主要作用用于生成多条指定长度的横线&…

cocoapods使用

macOS/iOS系统上做原生开发&#xff0c;需要用到的开源包管理工具&#xff1a;cocoapods。 类似&#xff1a; 语言包管理工具官方仓库镜像仓库私有仓库jsnpm,cnpm,pnpm,yarnpythonpip c#nugetjavagradle&#xff0c;mavenrubygemoc/c/swiftco…

快速幂极简写法快速幂求逆元

快速幂原理介绍 快速幂模板 int qmi(int a, int k, int p) {int res 1;while (k) {//后面的a其实是底数与其指数的运算结果了&#xff0c;是不断迭代的//第一个a其实就是a的2的0次方if (k & 1) res (res * a) % p;a (a * a) % p;//注意&#xff0c;a是一个不断变化的过…

Linux操作系统使用及C高级编程-D9D10Linux 服务搭建与使用

TFTP服务器 TFTP&#xff08;Trivial File Transfer Protocol&#xff09;即简单文件传输协议&#xff0c;是TCP/IP协议中一个用来在客户机与服务器之间进行简单文件传输的协议&#xff0c;提供不复杂、开销不大的文件传输服务。端口号为69 1、使用客户服务器方式和使用UDP数据…

Android 获取设备内存和外存

参考 Android 获取设备运行内存信息 https://blog.csdn.net/b1tb1t/article/details/131290808 Android 获取设备外存 // 全部外存, 和手机标称不一样public static long getTotalStorage() {File path Environment.getExternalStorageDirectory();StatFs stat new StatFs(p…

Qt TCP相关的一些整理:客户端常见操作 socket 通信 network

目录 1、相关的库和类 2、一些常用的API 3、帖子用到的完整核心代码&#xff1a; 1、相关的库和类 Qt下使用tcp协议&#xff0c;需要在工程的pro文件中添加&#xff1a; QT network 需要添加network网络库之后&#xff0c;才可以使用对应的类 客户端的类头文件&#xf…

python趣味编程-5分钟实现一个简单弹跳球游戏(含源码、步骤讲解)

简单的Python弹跳球程序是使用Python编程语言开发的。 Python 中的弹跳球游戏是 使用 Tkinter 和图形用户界面 (GUI) 设计的,它是一个桌面应用程序。 Python 中的弹跳球游戏代码使用Canvas 在 Python 中绘制对象和随机模块。

UVM项目笔记——通过寄存器模型实现AHB接口的寄存器读写(内含源码)

目录 1.前言 2.DRIVER实现 2.1 AHB二级流水时序 2.2 “队列错位法”实现driver 2.3 driver代码 2.4 仿真log与波形 2.5 多级流水拓展方法 1.前言 UVM driver在接口协议的实现中起着非常重要的作用&#xff0c;因为它一端处理基于类的事务级sequence&#xff0c;另一端处…

45-设计问题-最小栈

原题链接&#xff1a; 198. 打家劫舍 题目描述&#xff1a; 你是一个专业的小偷&#xff0c;计划偷窃沿街的房屋。每间房内都藏有一定的现金&#xff0c;影响你偷窃的唯一制约因素就是相邻的房屋装有相互连通的防盗系统&#xff0c;如果两间相邻的房屋在同一晚上被小偷闯入&a…