【Shell】shell编程之条件语句

news2024/11/20 6:13:21

目录

一、条件测试操作

1.test命令

2.文件测试

3.整数值比较

4.字符串比较

5.逻辑测试

二、if语句的结构

1.单分支结构

2.双分支结构

3.多分支结构

三、case语句

总结


一、条件测试操作

1.test命令

测试表达式是否成立,若成立返回0,否则返回其他数值

格式1:test 条件表达式
格式2:[条件表达式]                #方括号“[”或“]”与条件表达式之间需要至少一个空格进行分隔

#格式1:test 条件表达式
[root@localhost ~]# test a = a
[root@localhost ~]# echo $?
0
[root@localhost ~]# test a = b
[root@localhost ~]# echo $?
1
[root@localhost ~]#

#格式2:[条件表达式]
[root@localhost ~]# [ 1 = 1 ]
[root@localhost ~]# echo $?
0
[root@localhost ~]# [ 1 = 2 ]
[root@localhost ~]# echo $?
1
[root@localhost ~]#

2.文件测试

格式:[ 操作符 文件或目录 ]

常用的操作符

选项含义
-e测试目录或文件是否存在(Exist)
-d测试是否为目录(Directory)
-f测试是否为文件(File)
-r测试当前用户是否有权限读取(Read)
-w测试当前用户是否有权限写入(Write)
-x测试是否设置有可执行(Excute)权限
-L测试是否为符号链接
#测试目录或文件是否存在
[root@localhost ~]# ls
test.sh  
[root@localhost ~]# test -e test.sh    #测试目录或文件是否存在
[root@localhost ~]# echo $?
0
[root@localhost ~]# test -e test10.sh
[root@localhost ~]# echo $?
1
[root@localhost ~]# 

#测试链接符号是否存在
[root@localhost ~]# test -L test.sh
[root@localhost ~]# echo $?
1
[root@localhost ~]# ln -s test.sh test.lnk
[root@localhost ~]# test -L test.lnk
[root@localhost ~]# echo $?
0
[root@localhost ~]#

3.整数值比较

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

常用的操作符

选项含义
-eq等于                    ==
-ne不等于                 !=
-gt大于                     \>
-lt小于                    \<
-le小于等于
-ge大于等于
[root@localhost ~]# test 100 -eq 100
[root@localhost ~]# echo $?
0
[root@localhost ~]# test 100 -eq 200
[root@localhost ~]# echo $?
1
[root@localhost ~]# test 100 -ne 200
[root@localhost ~]# echo $?
0
[root@localhost ~]# test 100 -le 200
[root@localhost ~]# echo $?
0
[root@localhost ~]# test 100 -ge 200
[root@localhost ~]# echo $?
1
[root@localhost ~]#


[root@localhost ~]# [ 100 -ge 200 ]
[root@localhost ~]# echo $?
1
[root@localhost ~]# [ 100 -le 200 ]
[root@localhost ~]# echo $?
0
[root@localhost ~]#


[root@localhost ~]# [[ 99+1 -eq 100 ]]
[root@localhost ~]# echo $?
0
[root@localhost ~]# echo $((99+1))
100

4.字符串比较

格式1:
[ 字符串1 = 字符串2 ] 或 [[ 字符串1 == 字符串2 ]]    #相同
[ 字符串1 != 字符串2 ] 或 [[ 字符串1 != 字符串2 ]]   #不相同
[[ 字符串1 =~ 字符串2 ]]                             #包含

[root@localhost ~]# [ "abc" = "123" ]
[root@localhost ~]# echo $?
1
[root@localhost ~]# [ "abc" = "abc" ]
[root@localhost ~]# echo $?
0
[root@localhost ~]# a=abc
[root@localhost ~]# echo $?
0
[root@localhost ~]# echo $a
abc
[root@localhost ~]#

#包含
[root@localhost ~]# [[ "abc" =~ "a" ]]
[root@localhost ~]# echo $?
0
[root@localhost ~]# [[ "abc" =~ "1" ]]
[root@localhost ~]# echo $?
1
[root@localhost ~]#

格式2:
[  -z  "字符串" ]        #检查字符串是否为空(Zero),对于未定义或赋予空值的变量将视为空串
[  -n  "字符串" ]        #检查是否有字符串存在

注意:引号的使用,这是防止空格扰乱代码的好方法 

[root@localhost ~]# echo $a
abc
[root@localhost ~]# [ -z $a ]
[root@localhost ~]# echo $?
1
[root@localhost ~]# echo $b

[root@localhost ~]# [ -z $b]
[root@localhost ~]# echo $?
0
[root@localhost ~]#

5.逻辑测试

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

常用的操作符

-a或&&逻辑与,“而且”的意思,前后条件需都成立
-o或||逻辑或,“或者”的意思,只需前后条件中一个成立
!逻辑否
#“而且”的意思,前后条件需都成立
[root@localhost ~]# a=100
[root@localhost ~]# [ $a -gt 99 ] && [ $a -eq 100 ]
[root@localhost ~]# echo $?
0
[root@localhost ~]# [ $a -gt 99 ] && [ $a -ne 100 ]
[root@localhost ~]# echo $?
1
[root@localhost ~]#


#逻辑否
[root@localhost ~]# [ 100 -gt 99 ]
[root@localhost ~]# echo $?
0
[root@localhost ~]# [ ! 100 -gt 99 ]
[root@localhost ~]# echo $?
1
[root@localhost ~]# [ 100 -lt 99 ]
[root@localhost ~]# echo $?
1
[root@localhost ~]# [ ! 100 -lt 99 ]
[root@localhost ~]# echo $?
0
[root@localhost ~]#

#且和或的效果
[root@localhost ~]# [ $a -gt 99 -a $a -eq 100 ]
[root@localhost ~]# echo $?
0
[root@localhost ~]# [ $a -gt 99 -o $a -eq 100 ]
[root@localhost ~]# echo $?
0
[root@localhost ~]#

补充知识

[表达式1]  命令1  ||  命令2        #如果表达式1条件成立不会执行或运算符后面的命令1,如果表达式1条件不成立则会执行或运算符后面的命令1
[表达式1]  &&  命令1  ||  命令2         #如果表达式1条件成立则执行命令1,如果表达式1条件不成立则命令2

[root@localhost ~]# echo $a
100
[root@localhost ~]# [ $a -gt 99 ] && echo true || echo false    #如果表达式条件成立则执行命令ture,如果表达式1条件不成立则命令false
true
[root@localhost ~]#

案例

探测ip是否在线

[root@localhostopt]# ping -c 4 -i 0.5 -w 2 192.168.10.120 &> /dev/null
[root@localhost optl# echo $?
0
[root@localhostl# ping -c 4 -i 0.5 -w 2 192.168.10.120 $> /dev/null && echo "it is online" || echo "it is offline"
it is onlineit
[root@localhost]# ping -c 4 -i 0.5 -w 2 192.168.10.120 $> /dev/null && echo "it is online" || echo "it is offline"
it is offline

[root@localhost]#vim ping.sh

[root@localhost]# vim ping.sh
[root@localhost]# chmod +x ping.sh
[root@localhost]# ./ping.sh 192.168.10.120

探测服务是否启动

二、if语句的结构

1.单分支结构

if  已用磁盘空间>80%

        then 报警 

fi

[root@localhost ~]# df
文件系统                   1K-块    已用     可用 已用% 挂载点
devtmpfs                 1913504       0  1913504    0% /dev
tmpfs                    1930628       0  1930628    0% /dev/shm
tmpfs                    1930628   12532  1918096    1% /run
tmpfs                    1930628       0  1930628    0% /sys/fs/cgroup
/dev/mapper/centos-root 36805060 9639268 27165792   27% /
/dev/sda1                1038336  191284   847052   19% /boot
tmpfs                     386128       0   386128    0% /run/user/0
tmpfs                     386128      12   386116    1% /run/user/42
/dev/sr0                 4635056 4635056        0  100% /mnt
[root@localhost ~]# df | grep -w /
/dev/mapper/centos-root 36805060 9639248 27165812   27% /
[root@localhost ~]# df | grep -w / | awk '{print $2}'
36805060
[root@localhost ~]# df | grep -w / | awk '{print $3}'
9639248
[root@localhost ~]# total=$(df | grep -w / | awk '{print $2}')
[root@localhost ~]# used=$(df | grep -w / | awk '{print $3}')
[root@localhost ~]# echo $total
36805060
[root@localhost ~]# echo $used
9639472
[root@localhost ~]# echo "scale=2;${used}/${total}" | bc
.26
[root@localhost ~]# echo "scale=2;${used}/${total}*100" | bc
26.00
[root@localhost ~]# echo "scale=2;${used}/${total}*100" | bc | awk -F. '{print $1}'    26
[root@localhost ~]#

 shell脚本

2.双分支结构

[root@localhost]# vim demo2.sh
[root@localhost]#chmod +x demo2.sh
[root@localhost]#./demo2.sh
网站服务已在运行!

3.多分支结构

[root@localhost]# vim demo3.sh
[root@localhost]# chmod +x demo3.sh
[root@localhost]#./demo3.sh
请输入你的考试分数:88
soso,错题罚抄20遍!
[root@localhost]# ./demo3.sh
请输入你的考试分数:99
秀儿,错题罚抄10遍!
[root@localhost]#/demo3.sh
请输入你的考试分数:100
恭喜!今晚吃鸡!
[root@localhost]#

三、case语句

 

总结

条件测试的语法

        文件测试、整数值比较、字符串比较、逻辑测试

if条件语句的语法
        单分支、双分支、多分支

case多分支语句的语法

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

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

相关文章

Apache DolphinScheduler 4月简报:社区发展与技术革新速递

各位热爱 DolphinScheduler 的小伙伴们&#xff0c;4 月份的 DolphinScheduler 社区月报更新啦&#xff01;这里将记录 DolphinScheduler 社区每月的重要更新&#xff0c;欢迎关注&#xff01; 月度 Merge 之星 感谢以下小伙伴 4 月为 Apache DolphinScheduler 所做的精彩贡献…

Graph RAG:基于知识图谱的检索增强技术与优势对比

身处信息爆炸时代&#xff0c;如何从海量信息中获取准确全面的搜索结果&#xff0c;并以更直观、可读的方式呈现出来是大家期待达成的目标。传统的搜索增强技术受限于训练文本数量、质量等问题&#xff0c;对于复杂或多义词查询效果不佳&#xff0c;更无法满足 ChatGPT 等大语言…

spark sql 与scala混合开发实现数据入mongodb

目录 概述资源解决问题效果环境配置相关包关键代码 测试测试结果 概述 在此提供 spark sql 与scala混合开发实现数据入mongodb 相关思路 将部分重复性功能进行通用化(使用SQL与Scala混合开发模式)。 相关组件 hadoop 3.3.6 spark 3.4.2 kyuubi 1.8.0 基于上术组件开发 资源 …

【笔试训练】day22

1.添加字符 求最少不相等的位数&#xff0c;可以先求最多相等的位数。 在添加字符之前&#xff0c;A和B最多相等的位数是多少&#xff1f;由于A后面可以添加字符&#xff0c;也就使得A字符可以在B的任意一个位置开始比较。遍历一遍这个比较的起点&#xff0c;从这个起点开始跟…

Angular中的路由

Angular中的路由 文章目录 Angular中的路由前言一、创建路由二、创建多个组件路由三、创建子路由四、创建多个组件子路由 前言 在Angular中&#xff0c;路由是用于在不同的视图和组件之间导航的机制。Angular提供了一种强大的路由机制来管理单页应用&#xff08;SPA&#xff0…

Npm Install Docusaurus Demo【npm 安装 docusaurus 实践 】

文章目录 1. 简介2. 前提2.1 安装 git2.2 安装 node 3. 安装4. 项目结构5. 访问5.1 localhost 访问5.2 ip 访问 1. 简介 Docusaurus 是一个facebook的开源项目&#xff0c;旨在帮助开发者构建易于维护和部署的文档网站。它提供了一个简单的方法来创建专业的文档网站&#xff0…

asp.net结课作业中遇到的问题解决3

目录 1、想实现不止鼠标滑过就显示图片&#xff0c;初始化状态下也可以显示图片&#xff0c;且每个图片还会自动变化&#xff0c;该如何实现 2、 同一个项目下的网页之间可以直接在地址栏输入跳转到阅读界面从而实现在这个跳转&#xff0c;那么如何防止这种现象呢&#xff1f;…

python数据分析——pandas DataFrame基础知识1

参考资料&#xff1a;活用pandas库 1、加载数据集 通常调用read_csv函数来加载CSV数据文件。若是.tsv文件也是用read_csv函数。 # 导入库 import pandas as pd # 默认情况下&#xff0c;read_csv函数会读取逗号分隔文件 # Gapminder数据使用制表符分隔 # 可以吧sep参数设置为…

计算机组成原理网课笔记

无符号整数的表示与运算 带符号整数的表示与运算 原反补码的特性对比 移码

推荐非常方便的初始配置nginx的开源工具

官网 https://www.digitalocean.com/community/tools/nginx?global.app.langzhCN直接复制base64字符串在 /etc/nginx 目录执行&#xff0c;会自动生成配置文件&#xff0c;最后执行 使用tar解压新的压缩配置 tar -xzvf nginxconfig.io-xxx.com.tar.gz | xargs chmod 0644在…

中国结(科普)

中国结是一种手工编织工艺品&#xff0c;它身上所显示的情致与智慧正是汉族古老文明中的一个侧面。 [1]它原本是由旧石器时代的缝衣打结&#xff0c;后推展至汉朝的仪礼记事&#xff0c;再演变成今日的装饰手艺。周朝人随身的佩戴玉常以中国结为装饰&#xff0c;而战国时代的铜…

Golang | Leetcode Golang题解之第78题子集

题目&#xff1a; 题解&#xff1a; func subsets(nums []int) (ans [][]int) {set : []int{}var dfs func(int)dfs func(cur int) {if cur len(nums) {ans append(ans, append([]int(nil), set...))return}set append(set, nums[cur])dfs(cur 1)set set[:len(set)-1]df…

Java 11 到 Java 8 的兼容性转换

Java 11 到 Java 8 的兼容性转换 欲倚绿窗伴卿卿&#xff0c;颇悔今生误道行。有心持钵丛林去&#xff0c;又负美人一片情。 静坐修观法眼开&#xff0c;祈求三宝降灵台&#xff0c;观中诸圣何曾见&#xff1f;不请情人却自来。 入山投谒得道僧&#xff0c;求教上师说因明。争奈…

从离线到实时:无锡锡商银行基于 Apache Doris 的数据仓库演进实践

作者&#xff1a;武基鹏&#xff0c;无锡锡商银行 大数据技术经理 编辑整理&#xff1a;SelectDB 技术团队 导读&#xff1a;为实现数据资产的价值转化以及全面数字化、智能化的风险管理&#xff0c;无锡锡商银行大数据平台经历从 Hive 离线数据仓库到 Apache Doris 实时数据仓…

ifconfig命令找不到 command not found

问题 今天解决虚拟机的网络问题后&#xff0c;使用ifconfig发现报错命令未找到 解决方案 输入yum install ifconfi的程序安装包 yum install ifconfig 如果显示没有可用软件包 ifconfig&#xff0c;错误&#xff1a;。 就输入yum search ifconfig匹配安装包程序 yum searc…

数仓开发,分层(ods,dw,app层)

1、从数据源中导入源数据&#xff0c;到ODS表&#xff0c;作为事实表的数据 2、可以根据自己的开发设计&#xff0c;是否单独分支出来一个维度表&#xff0c;帮助和协助处理源数据表ODS层 和需求层ADS&#xff08;APP&#xff09;层 3、现在我们有了一个事实ODS层&#xff0…

力扣每日一题119:杨辉三角||

题目 简单 给定一个非负索引 rowIndex&#xff0c;返回「杨辉三角」的第 rowIndex 行。 在「杨辉三角」中&#xff0c;每个数是它左上方和右上方的数的和。 示例 1: 输入: rowIndex 3 输出: [1,3,3,1]示例 2: 输入: rowIndex 0 输出: [1]示例 3: 输入: rowIndex 1 输出…

基于SSM的“小型企业人事管理系统”的设计与实现(源码+数据库+文档+PPT)

基于SSM的“小型企业人事管理系统”的设计与实现&#xff08;源码数据库文档PPT) 开发语言&#xff1a;Java 数据库&#xff1a;MySQL 技术&#xff1a;SSM 工具&#xff1a;IDEA/Ecilpse、Navicat、Maven 系统展示 系统功能结构图 登录界面 个人信息页面 用户打卡页面 扣…

C++贪心算法

关于string的系统函数&#xff01; &#xff08;注&#xff1a;以下函数只可用于string&#xff0c;不适用其他类型的变量&#xff09; ① a.size(); 这个系统函数是用来获取这个string变量的长度的&#xff0c;我们通常会新建一个变量来保存他&#xff0c;以便之后使用。 …

跨协议通讯无缝对接:Modbus-BACnet楼宇智能转换器深度解析

在现代化的建筑群里&#xff0c;智能楼宇管理系统如同神经系统&#xff0c;协调着各设备的运行。某大型商业综合体&#xff0c;集购物中心、办公区、酒店于一体&#xff0c;面对着来自不同供应商的设备&#xff0c;如何实现统一管理和高效通讯成了首要挑战。特别是其内部既有采…