shell脚本条件语句和循环语句

文章目录

  • 一、条件语句
    • 测试
    • 比较整数数值
    • 字符串比较
    • 逻辑运算
    • 双中括号
    • ( ){ }
    • if语句结构
    • case语句
  • 二、循环语句
    • 基础知识
    • for循环
    • while
    • until
    • 双重循环及跳出循环


一、条件语句

测试

条件测试:判断某需求是否满足,需要由测试机制来实现,专用的测试表达式需要由测试命令辅助完成。测试过程,实现评估布尔声明,以便用在条件性环境下进行执行。

若真,则状态码变量 $? 返回0
若假,则状态码变量 $? 返回1

格式:
1.test 条件表达式
2.[ 条件表达式 ](注意大括号前后需要空格)
测试使用echo$? 的返回值来判断是否成功。

操作符:

  • -d:测试是否为目录(Directory)
  • -e:测试目录或文件是否存在(Exist)
  • -a:测试目录或文件是否存在(Exist)
  • -f:测试是否为文件(File)
  • -r:测试当前用户是否有权限读取(Read)
  • -w:测试当前用户是否有权限写入(Write)
  • -x:测试当前用户是否有权限执行(eXcute)
  • -L: 测试是否为软连接文件

属性测试补充:
-s FILE #是否存在且非空
-t fd #fd 文件描述符是否在某终端已经打开
-N FILE #文件自从上一次被读取之后是否被修改过
-O FILE #当前有效用户是否为文件属主
-G FILE #当前有效用户是否为文件属组

在这里插入图片描述

比较整数数值

[ 整数1 -操作符 整数2 ]

  • -eq:第一个数等于(Equal)第二个数
  • -ne:第一个数不等于(Not Equal)第二个数
  • -gt:第一个数大于(Greater Than)第二个数
  • -lt:第一个数小于(Lesser Than)第二个数
  • -le:第一个数小于或等于(Lesser or Equal)第二个数
  • -ge:第一个数大于或等于(Greater or Equal)第二个数
    在这里插入图片描述

字符串比较

常用的测试操作符

  • =:字符串内容相同
  • !=:字符串内容不同,! 号表示相反的意思
  • -z:字符串内容为空
  • -n: 字符是否存在

格式
[ 字符串1 = 字符串2 ] 是否相同

[ 字符串1 != 字符串2 ] 是否不相同

[ -z 字符串 ] 是否为空

[ -n 字符串 ] 字符是否存在
在这里插入图片描述

逻辑运算

  • -a或&&:逻辑与,“而且”的意思全真才为真
  • -o或||:逻辑或,“或者”的意思一真即为真
  • !:逻辑否

cmd1 操作符 cmd2

组合用法
( cmd1 && cmd2) || cmd3
cmd1 成功 会执行cmd2 不执行cmd3
cmd1 不成功 会执行cmd3

双中括号

[[ ]]
== 左侧字符串是否和右侧的字符串相同
注意:此表达式用于[[ ]]中,字符串为通配符
=~ 左侧字符串是否能够被右侧的正则表达式的字符串所匹配
在这里插入图片描述
重点注意正则表达式和通配符的区别

( ){ }

(CMD1;CMD2;…)和 { CMD1;CMD2;…; } 都可以将多个命令组合在一起,批量执行。
两者最大的不同点: 用( )执行多条程序时,会开启字shell,即在新的bash环境下,而{ }则是在当前bash环境下。

if语句结构

分支结构
1.单分支

if 判断条件;
then 条件为真的分支代码
fi
注意: if······fi 主体结构,注意分号是英文格式
在这里插入图片描述

2.双分支
if 判断条件; then
条件为真的分支代码
else
条件为假的分支代码
fi
在这里插入图片描述

3.多分支
if 判断条件1
then
条件1为真的分支代码

elif 判断条件2
then
条件2为真的分支代码

elif 判断条件3;then
条件3为真的分支代码


else
以上条件都为假的分支代码 托底
fi
在这里插入图片描述

case语句

基本格式

read -p          i #从屏幕输入条件case $i in
PAT1)             #满足分支1条件则执行分支1的程序分支1;;
PAT2)分支2;;
...
*)默认分支;;

在这里插入图片描述

二、循环语句

基础知识

echo
echo -n 表示不换行输出
echo -e 表示输出转义符

选项作用
\r光标移至行首,并且不换行
\s当前shell的名称,如bash
\t插入Tab键,制表符
\n输出换行
\f换行,但光标仍停留在原处
\表示插入"\"本身转义
\b表示退格 不显示前一个字符
\c抑制更多的输出或不换行

在这里插入图片描述
退格删除前面的字符
注意:退格键和末尾的字符相关,超过末尾的字符数量会出现bug

date
date查看当前系统时间

-d 你描述的日期,显示指定字符串所描述的时间,而非当前时间

%F 完整日期格式,等价于 %Y-%m-%d

% T 时间(24小时制)(hh:mm:ss)

在这里插入图片描述

for循环

循环含义:将某段代码重复运行多次,通常有进入循环的条件和退出循环的条件 。
常见的循环的命令:for;while;until
for用于已知循环次数;until、while用于循环次数未知。

列表循环
语法:
for 变量名 in {list}
do
命令
done

花括号{ }和seq在for循环中的应用

for i in {1..50..2} 1-50的奇数
for i in {2..50..2} 1-50的偶数
for i in {10..1}  1-10倒序排列for i in $(seq 10)  1-10正序排列
for i in $(seq 10 -1 1) 1-10倒序排列
for i in $(seq 1 2 10) 1-10的奇数,中间为步长

在这里插入图片描述
不带列表循环
for 变量名
do
命令
done
脚本中没有变量参数,需要在执行的时候手动传参。

在这里插入图片描述

类似于c语言风格的for循环

for (( 表达式1; 表达式2; 表达式3 )); do 命令; done

for ((expr1;expr2;expr3))
do
命令
done

expr1:定义变量并赋初值
expr2:决定是否循环
expr3:决定循环变量如何改变,决定循环什么时候退出
在这里插入图片描述

while

相对于for,需要知道循环次数,但有些时候并不能知道循环次数。我们只知道停止条件,不知道次数,就需要用到while循环。直到达到条件。
while循环
1.语法结构
2.死循环
while循环一般用于有条件判断的循环,若判断条件为真,则进入循环,当然条件为假就跳出循环。
语法:
while 条件
do
命令
done

死循环
while 后面跟的条件为一定正确的,一般为true或者[ 1 -eq 1];这样命令会一直执行。

在这里插入图片描述

until

until循环和while循环类似,但区别在于while循环在条件为真时继续执行循环,而until则是在条件为假时执行循环。

在这里插入图片描述

双重循环及跳出循环

  • break跳出单个循环 break n 数字数字是几代表跳出n层循环
  • continue终止某次循环中的命令,但是不会完全终止命令
  • exit 直接退出脚本

continue终止某次循环的命令;终止i=5。
在这里插入图片描述
break跳出一层循环;
在这里插入图片描述
break跳出两层循环;
在这里插入图片描述
exit直接退出脚本;
在这里插入图片描述

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

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

相关文章

视频分类——C3D使用

整体比较分散,可能很多源码都需要修改,需要有耐心。 一、数据准备 PS 调研后,上手容易代码比较简洁的是:https://github.com/Niki173/C3D/tree/main 因为源码很多参数都写死到了源码中,没有解耦,并且默…

CCF-CSP认证 2024年3月 4.化学方程式配平

题解&#xff1a;首先完成数据的读入&#xff0c;然后高斯消元求秩按题意解即可 #pragma GCC optimize(2, 3, "Ofast", "inline") #include <bits/stdc.h> using namespace std; const int maxn 100;using matrix double[maxn][maxn]; using vect…

5.20Git

版本控制工具Git&#xff0c;其他的工具还有SVN 共享代码&#xff0c;追溯记录&#xff0c;存储.c文件 Git实现的功能&#xff1a;回溯&#xff08;以前某个时间节点的数据情况&#xff09;共享&#xff08;大家共享修改&#xff09; Git&#xff1a;80% SVN&#xff…

QT tableWidget详细分析

一.定义 QTableWidget是一个用于显示表格数据的Qt控件&#xff0c;它是一个基于Qt Model/View框架的视图组件。QTableWidget提供了一种简单的方式来展示和编辑表格数据&#xff0c;用户可以通过添加行、列和单元格来构建一个完整的数据表格。 下面是一些QTableWidget的主要特点…

The Missing Semester of Your CS Education(计算机教育中缺失的一课)

Shell 工具和脚本(Shell Tools and Scripting) 一、shell脚本 1.1、变量赋值 在bash中为变量赋值的语法是foobar&#xff0c;访问变量中存储的数值&#xff0c;其语法为 $foo。 需要注意的是&#xff0c;foo bar &#xff08;使用空格隔开&#xff09;是不能正确工作的&…

网工内推 | 香港移动,10年以上数通经验,CCIE,5W-6W

01 香港移动招聘 &#x1f537;招聘岗位&#xff1a;网络工程师 &#x1f537;岗位要求&#xff1a; 需要有10年及以上数通经验&#xff0c;有CCIE 证书&#xff0c;懂技术管理&#xff0c;沟通畅通 &#x1f537;语言要求&#xff1a; 粤语英语 &#x1f537;薪资&#xff1…

基于灰狼优化算法优化RBF(GWO-RBF)的数据回归预测(多输入多输出)

代码原理及流程 基于灰狼优化算法优化多输入多输出&#xff08;MIMO&#xff09;的RBF神经网络的数据回归预测&#xff0c;可以采取以下步骤&#xff1a; 1. 数据准备&#xff1a;准备包含多个输入特征和多个输出目标的数据集&#xff0c;确保数据已经经过预处理和归一化。 …

TCP - 半连接队列和全连接队列

目录 一、半连接队列和全连接队列的概念 二、全连接队列溢出 三、半连接队列溢出 一、半连接队列和全连接队列的概念 1. 半连接队列&#xff1a;服务端收到客户端发送的 SYN 包时&#xff0c;内核会将该连接加入半连接 SYN 队列&#xff0c;并向客户端返回响应 2. 全连接队…

CSS基础(第二天)

Emmet语法 快速生成HTML结构语法 1. 生成标签 直接输入标签名 按tab键即可 比如 div 然后tab 键&#xff0c; 就可以生成 <div></div> 2. 如果想要生成多个相同标签 加上 * 就可以了 比如 div*3 就可以快速生成3个div 3. 如果有父子级关系的标签&#xff0c;可以…

算法刷题笔记 数的范围(C++实现)(二分法重要例题)

文章目录 题目描述题目思路题目代码&#xff08;C&#xff09;题目感想 题目描述 给定一个按照升序排列的长度为n的整数数组&#xff0c;以及q个查询。对于每个查询&#xff0c;返回一个元素k的起始位置和终止位置&#xff08;位置从0开始计数&#xff09;。如果数组中不存在该…

Docker【2】iptables 错误解决

iptables 错误解决 问题说明问题分析解决步骤1. 确保 iptables 模块已加载2. 检查和重启 docker 服务3. 检查 firewalld 状态4. 重置 iptables 规则5. 查看和更新 Docker 配置 总结 问题说明 执行的 docker 命令如下&#xff0c;启动 nginx 并设置宿主机端口 (8080) 与容器端口…

学习Uni-app开发小程序Day25

这一章学习了触底加载更多阻止无效的网络请求、分类列表存入Storage在预览页面读取缓存展示、通过swiper的事件实现真正的壁纸预览及切换 触底加载更多阻止无效的网络请求、load-more样式的展现 前面已经学习了当列表触底后&#xff0c;会继续加载&#xff0c;当到最后一层后…

自动化测试--利用pytest实现整条业务链路测试

​ 概述 前面一章讲解了单个接口的测试&#xff0c;但是实际项目中&#xff0c;因为权限和登录状态的限制&#xff0c;大部分接口没办法直接访问到&#xff0c;这时候我们想访问到一个系统的接口&#xff0c;就需要模拟用户登录拿到用户的token和所拥有的权限之后再将这些信息…

vivado2020.2创建hls仿真工程实现led闪烁

下载vivado2020.2后会有这个出现在桌面 点击进入创建工程&#xff0c;这里注意不要有前面的\我再复制的时候复制错了导致创建失败 按f光标就会跳转到下一个f开头的函数处&#xff0c;要查找其他函数也同理 生成了一个synthesis summary文件 找到目录下生成的.v文件 an 点…

Pod进阶——资源限制以及探针检查

目录 一、资源限制 1、资源限制定义&#xff1a; 2、资源限制request和limit资源约束 3、Pod和容器的资源请求和限制 4、官方文档示例 5、CPU资源单位 6、内存资源单位 7、资源限制实例 ①编写yaml资源配置清单 ②释放内存&#xff08;node节点&#xff0c;以node01为…

【知识蒸馏】多任务模型 logit-based 知识蒸馏实战

一、什么是逻辑&#xff08;logit&#xff09;知识蒸馏 Feature-based蒸馏原理是知识蒸馏中的一种重要方法&#xff0c;其关键在于利用教师模型的隐藏层特征来指导学生模型的学习过程。这种蒸馏方式旨在使学生模型能够学习到教师模型在特征提取和表示方面的能力&#xff0c;从…

有些错误,常犯常新、常新常犯:记录一个使用element-plus的tooltip组件的错误

使用element-plus的tooltip组件&#xff0c;最开始的写法是这样的&#xff1a; <el-tooltipclass"box-item"effect"dark"content"tooltip content" ><el-button v-if"isDisabled" :underline"false" type"pr…

持续总结中!2024年面试必问 20 道 Redis面试题(五)

上一篇地址&#xff1a;持续总结中&#xff01;2024年面试必问 20 道 Redis面试题&#xff08;四&#xff09;-CSDN博客 九、Redis的同步机制了解么&#xff1f; Redis 的同步机制是其复制策略的核心部分&#xff0c;确保数据在主节点&#xff08;master&#xff09;和从节点…

【C语言】程序员自我修养之文件操作

【C语言】程序员自我修养之文件操作 &#x1f525;个人主页&#xff1a;大白的编程日记 &#x1f525;专栏&#xff1a;C语言学习之路 文章目录 【C语言】程序员自我修养之文件操作前言一.文件介绍1.1为什么使用文件1.2文件分类1.3二进制文件和文本文件 二.文件的打开和关闭2.…

桌面藏线大法

1有线改无线&#xff1a; 蓝牙鼠标 蓝牙键盘 蓝牙耳机 2将排插贴到桌子底下 购物软件上搜 3断舍离 不要的电子产品统统扔掉 4 洞洞板和挂钩 这个不用介绍了