Shell编程条件语句 if case (愿此行终抵群星)

news2024/9/21 22:34:08

一、Shell条件语句

Shell环境根据命令执行后的返回状态值($?)来判断是否执行成功,当返回值为0(真 true)时表示成功,返回值为非0值(假 false)时表示失败或异常。

test 命令
更多操作可使用 man test 查看

1.条件表达式测试

[ 条件表达式 ]

[root@localhost1 ~]#[ 1 = 1 ]
[root@localhost1 ~]#echo $?
0
 
[root@localhost1 ~]#[ 1 > 10 ]
[root@localhost1 ~]#echo $?
1

2.文件测试

[ 操作符 文件或目录 ]

在这里插入图片描述

//测试 /root 是否是一个目录
[root@localhost1 ~]#test -d /root/
[root@localhost1 ~]#echo $?
0  --//测试 /root 是否是一个文件
[root@localhost1 ~]#[ -f /root/ ]
[root@localhost1 ~]#echo $?
1  --

3.整数值比较

[ 整数或变量 操作符 整数或变量 ]

在这里插入图片描述

[root@localhost1 ~]#a=10
[root@localhost1 ~]#b=20
 
//测试 $a 是否等于10
[root@localhost1 ~]#test $a -eq 10
[root@localhost1 ~]#echo $?
0
//测试 $a 是否大于 $b
[root@localhost1 ~]#test $a -gt $b
[root@localhost1 ~]#echo $?
1

4.字符串比较

[字符串1 操作符 字符串2]

在这里插入图片描述

as[root@localhost1 ~]#echo $LANG
zh_CN.UTF-8
 
//判断 $LANG 是否为 us.en
[root@localhost1 ~]#[ $LANG = "us.en" ]
[root@localhost1 ~]#echo $?
1

5.逻辑测试

[ 表达式1 ] 操作符 [ 表达式2 ]

在这里插入图片描述

[root@localhost1 ~]#a=1
[root@localhost1 ~]#b=1
 
//逻辑与,两条命令均执行成功才返回0
[root@localhost1 ~]#[ $a = 1 ] || [ $a = $b ]
[root@localhost1 ~]#echo $?
0
 
//逻辑或,其一为真则返回0
[root@localhost1 ~]#[ $a > 1 ] || [ $a = $b ]
[root@localhost1 ~]#echo $?
0

特殊用法:&& 与 || 一起使用(逻辑与执行返回状态为否,则继续执行逻辑或后的命令)

//创建文件1.txt
[root@localhost1 data]#touch 1.txt
[root@localhost1 data]#ls
1.txt
 
//判断1.txt 是否是目录,逻辑与返回状态为否,继续执行逻辑或后的命令
[root@localhost1 data]#[ -d 1.txt ] && echo "1.txt 是目录" || echo "1.txt 不是目录"
1.txt 不是目录

二、if 条件语句(串行执行)

(1)单分支结构

if [ 条件表达式 ];than
执行命令行 (当条件判断成立)
fi

在这里插入图片描述

//判断3是否大于2
[root@localhost1 ~]#vim test1.sh
#!/bin/bash
if [ 3 -ge 2 ]; then
  echo "yes"
fi
 
[root@localhost1 ~]#bash test1.sh
yes

(2)双分支结构

if [ 条件表达式 ];than
执行命令行 (当条件判断成立)
else
执行命令行 (当条件判断不成立)
fi

在这里插入图片描述

(3)多分支结构

if [ 条件表达式1 ];than
执行命令行 (当条件判断1成立)
elif [ 条件表达式2 ];than – 可以有多个elif 判断语句
执行命令行 (当条件判断2成立)
else
执行命令行 (当条件判断都不成立)
fi

在这里插入图片描述

//判断年龄满足大于等于18的购买成人票,不满足购买学生票
[root@localhost1 ~]#vim test2.sh
#!/bin/bash
read -p "请输入您的年龄:" age
if [ $age -ge 18 ];then
  echo "请购买成人票(80元)"
else
  echo "请购买学生票(40元)"
fi
 
[root@localhost1 ~]#bash test2.sh
请输入您的年龄:20
请购买成人票(80元)
 
[root@localhost1 ~]#bash test2.sh
请输入您的年龄:8
请购买学生票(40元)

(3)多分支结构

if [ 条件表达式1 ];than
执行命令行 (当条件判断1成立)
elif [ 条件表达式2 ];than – 可以有多个elif 判断语句
执行命令行 (当条件判断2成立)
else
执行命令行 (当条件判断都不成立)
fi

[root@localhost1 ~]#vim test2.sh
#!/bin/bash
read -p "请输入您的年龄:" age
if [ $age -ge 60 ];then
  echo "请购买老人票(20元)"
elif [ $age -gt 18 ] && [ $age -lt 60 ];then
  echo "请购买成人票(80元)"
elif [ $age -ge 6 ] && [ $age -lt 18 ];then
  echo "请购买学生票(40元)"
else
  echo "请购买儿童票(20元)"
fi
 
[root@localhost1 ~]#bash test2.sh
请输入您的年龄:70
请购买老人票(20元)
 
[root@localhost1 ~]#bash test2.sh
请输入您的年龄:23
请购买成人票(80元)
 
[root@localhost1 ~]#bash test2.sh
请输入您的年龄:14
请购买学生票(40元)
 
[root@localhost1 ~]#bash test2.sh
请输入您的年龄:3
请购买儿童票(20元)

三、case语句(并行执行)

case 变量名 in
模式1) – 指定模式可以有多个(支持通配符)
命令序列
;;
模式2)
命令序列
;;
*) – 默认模式(除上述指定模式的其他情况)
默认命令序列
;;
esac

[root@localhost1 ~]#vim test3.sh
#!/bin/bash
read -p "请输入你的分数(0~100):" num
 
case $num in
100)
  echo "满分!"
  ;;
 
9[0-9])
  echo "优秀!"
  ;;
 
[78][0-9])
  echo "良好!"
  ;;
 
6[0-9])
  echo "合格!"
  ;;
 
[0-9]|[1-5][0-9])
  echo "不及格!"
  ;;
 
*)
  echo "输入有误,请输入 0~100 的范围!"
esac
 
[root@localhost1 ~]#bash test3.sh
请输入你的分数(0~100):100
满分!
 
[root@localhost1 ~]#bash test3.sh
请输入你的分数(0~100):97
优秀!
 
[root@localhost1 ~]#bash test3.sh
请输入你的分数(0~100):78
良好!
 
[root@localhost1 ~]#bash test3.sh
请输入你的分数(0~100):62
合格!
 
[root@localhost1 ~]#bash test3.sh
请输入你的分数(0~100):45
不及格!
 
[root@localhost1 ~]#bash test3.sh
请输入你的分数(0~100):123
输入有误,请输入 0~100 的范围!

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

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

相关文章

深度学习论文分享(二)Data-driven Feature Tracking for Event Cameras

深度学习论文分享(二)Data-driven Feature Tracking for Event Cameras(CVPR2023) 前言Abstract1. Introduction2. Related Work3. Method3.1. Feature Network3.2. Frame Attention Module3.3. Supervision 4. Experiments5. Con…

焕新时刻,移动云品牌升级燃动十一城

4月25日,在2023移动云大会上,移动云品牌形象全方位焕新,启用新品牌LOGO和品牌标语,在政府领导、院士专家、行业大咖等3000多位参会嘉宾见证下,吹响品牌进阶新号角。 24日晚,移动云品牌焕新亮灯仪式率先在苏…

C语言入门篇——指针篇

目录 1、指针 1.1内存地址 1.2基地址 1.3指针变量 2、指针类型 2.1指针-整数 2.2指针的解引用 3、特殊指针 3.1野指针 3.2空指针 4、指针运算 4.1指针-指针 4.2指针的关系运算 5、指针和数组 6、二级指针 7、指针数组 1、指针 1.1内存地址 内存是电脑上特别重…

剑指offer 26树的子结构

文章目录 题目详情分析判断A中有出现和B相同的结构和节点值递归主体,解决问题 完整代码总结 题目详情 树的子结构 输入两棵二叉树A和B,判断B是不是A的子结构。(约定空树不是任意一个树的子结构) B是A的子结构, 即 A中有出现和B相同的结构和节…

合并两个有序链表

文章目录 1.题目描述2.解题思路方法1:方法2: 1.题目描述 题目链接:力扣21,合并两个有序链表 将两个升序链表合并为一个新的 升序 链表并返回。新链表是通过拼接给定的两个链表的所有节点组成的。 2.解题思路 方法1:…

【python】多进程和多线程

【Python】多线程 概念 同一时间内能够执行多个任务 执行方式 并发:多个任务交替去运行 并发:多喝CPU中,多个任务是在多个CPU上运行的 一般来说:并发和并行是同时存在的,是操作系统自动调用的 实现方式 多进程实…

系统集成项目管理工程师 笔记(第九章:项目成本管理)

文章目录 9.1.1 成本与成本管理概念 329项目成本管理的过程 9.1.2 相关术语 331成本的类型(6种)应急储备与管理储备 9.2.3 项目成本管理计划制订的 输出 3349.3.1 项目成本估算的主要相关因素 335项目估算还需要考虑但 容易被忽视的 主要因素 9.3.2 项目…

随机森林(Random Forest)简单介绍

文章目录 随机森林(Random Forest)简单介绍1. 介绍2. 工作原理2.1 随机森林的基本原理2.1.1 随机采样2.1.2. 随机选特征2.1.3. 多数表决 2.2 随机森林的建模过程2.2.1. 建立多颗决策树2.2.2. 特征随机选择2.2.3. 样本随机选择2.2.4. 决策树训练与生成2.2…

发现【Stable-Diffusion WEBUI】的神奇插件:离线自动翻译中文提示词

文章目录 (零)前言(一)提示词翻译(Prompt Translator)(1.1)尚需改进 (零)前言 本篇主要提到了WEBUI的提示词翻译插件,之前我说不喜欢联网的插件&a…

【单目标优化算法】沙猫群优化算法(Matlab代码实现)

💥💥💞💞欢迎来到本博客❤️❤️💥💥 🏆博主优势:🌞🌞🌞博客内容尽量做到思维缜密,逻辑清晰,为了方便读者。 ⛳️座右铭&a…

【011】pandas处理数据的作用_#py

pandas操作 1. 导入数据库2. 修改行列名2.1 修改列名2.2 修改行名 3. 按条件筛选3.1 根据条件筛选,提取所有信息3.2 根据条件筛选,提取某列或者某几列 4. 按某行某列提取信息4.1 获取信息4.2 更改具体的值 5. 合并5.1 单列并入大数据中(方法一…

根据虚拟地址,如何求出页号和偏移量?

方法掌握 虚拟地址划分成虚拟页号和虚拟页偏移量。 物理地址同样可划分为物理页号和物理页偏移量 如何划分,关键点在于页面的大小。 假设给你一个十进制表示的地址20000,一个页面的大小为4KB,那么如何找出地址20000的具体位置呢&#xff1f…

消息队列介绍

一、消息队列(MQ)概述 消息队列(Message Queue),是分布式系统中重要的组件,其通用的使用场景可以简单地描述为: 当不需要立即获得结果,但是并发量又需要进行控制的时候,差不多就是需要使用消息队…

如何获取“上帝”的系统版本

如何获取“上帝”的系统版本 在对技术支持过程中,每个公司都难免会遇到这样一个困扰:我们的程序明明在内部环境中测试的好好的,但是到了客户手里总会出现各种问题。 从以往累计的经验来看,这类问题通常和客户的系统环境有关。所…

PHP库存管理系统mysql数据库web结构apache计算机软件工程网页wamp

一、源码特点 PHP库存管理系统 是一套完善的web设计系统,对理解php编程开发语言有帮助,系统具有完整的源代码和数据库,系统主要采用B/S模式开发。开发环境为PHP APACHE,数据库为 mysql5.0,使用php语言开发。 php 库…

【redis】redis分布式锁(一)手写分布式锁1.0~6.0

redis分布式锁(入门) 文章目录 redis分布式锁(入门)前言一、面试题redis的用法:CAP 二、锁的种类三、一个靠谱分布式锁需要具备的条件和刚需四、分布式锁五、重点六、Base案例(bootredis)1.0、最…

如何使用WordPress建立在线辅导网站(3个步骤)

在线辅导网站在过去几年中变得非常流行。随着越来越多的人转向远程工作和学习,这个行业已成为在家赚取额外收入的绝佳方式。 此外,提供在线指导可以帮助您成为所在领域的权威。 如果您想提供在线辅导,最好的方法通常是通过您自己的辅导网站…

并发编程中的三大问题剖析与解决

java并发编程中的三大问 可见性原因分析:解决: 原子性原因分析:解决: 有序性解决: 首先让我们来了解一下JUC JUC(Java Util Concurrent)是Java提供的一个并发编程工具包,它解决了在多…

【Linux】进程地址空间的初步理解

目录 程序地址空间空间布局图引入物理地址与虚拟地址的概念虚拟地址空间虚拟地址与物理地址是如何对应的?※父子进程独立性的理解(重点)fork两个返回值的原理地址空间为什么要存在?补充理解 程序地址空间空间布局图 (这…

IDEA 新版安装教程

目录 一、安装IDEA 1、双击安装,然后下一步 2、修改默认安装路径,自定义目录。(建议所有开发工具都放在同一个盘符) 3、改为自定义安装路径,下一步。(不用使用中文或空格) 4、创建桌面图标等 5、点击安装&#x…