Shell编程学习之if分支语句的应用
- Shell编程中的if分支语句:
- 伪代码表示:
- 注意符号和表达式之间的空格;
if [ 表达式1 ]
then分支1
elif [ 表达式2 ]
then分支2
elif [ 表达式3 ]
then分支3
else其它
fi
- 按整型的方式,if分支语句比较字符串的大小:
- 等于:
-eq
- 不等于:
-ne
- 小于:
-lt
- 大于:
-gt
- 小于等于:
-le
- 大于等于:
-ge
方括号[ ]内部
逻辑与运算:-a
方括号[ ]外部
逻辑与运算:&&
方括号[ ]内部
逻辑或运算:-o
方括号[ ]外部
逻辑或运算:||
- 逻辑非运算:
!
- 测试代码:
#!/bin/bashread -p "请输入数值1:" X
read -p "请输入数值2:" Yif [ $X -gt 0 ] && [ $Y -gt 0 ]
thenecho "两个大于0的数值"if [ $X -eq $Y ]thenecho "$X等于$Y"elif [ $X -gt $Y ]thenecho "$X大于$Y"elseecho "$X小于$Y"fi elseecho "两个小于或着等于0的数值"
fi
- 运行结果:
#第一次运行
请输入数值1:88
请输入数值2:99
两个大于0的数值
88小于99
#第二次运行
请输入数值1:99
请输入数值2:99
两个大于0的数值
99等于99
#第三次运行
请输入数值1:99
请输入数值2:88
两个大于0的数值
99大于88
#第四次运行
请输入数值1:-88
请输入数值2:-99
两个小于或着等于0的数值
- if分支语句判断文件的类型:
- 判断文件是否存在:
-e
- 判断文件是否非空:
-s
- 判断文件是否是块设备文件:
-b
- 判断文件是否是套接字文件:
-S
- 判断文件是否是管道文件:
-p
- 判断文件是否是普通文件:
-f
- 判断文件是否是链接文件:
-L
- 判断文件是否是字符设备文件:
-c
- 判断文件是否是目录文件:
-d
- 特别注意:
- 判断文件类型时,若文件既是链接文件,又是普通文件时,优先判断链接文件;
- 测试代码:
#!/bin/bashread -p "请输入某文件名称:" FEif [ -e $FE ]
thenecho "该文件存在"if [ -s $FE ]thenecho "该文件不是空的"if [ -L $FE ]thenecho "该文件是链接文件"elif [ -f $FE ]thenecho "该文件是普通文件"elif [ -d $FE ]thenecho "该文件是目录文件"fielseecho "该文件是空的"fi
elseecho "该文件不存在"
fi
- 运行结果:
请输入某文件名称:f5.sh
该文件存在
该文件不是空的
该文件是普通文件
- if分支语句判断文件的权限:
- 判断文件是否有读权限:
-r
- 判断文件是否有写权限:
-w
- 判断文件是否有执行权限:
-x
- 特别注意:
- 判断的是执行脚本者的权限;
- 测试代码:
#!/bin/bashread -p "请输入文件名:" FEif [ -r $FE ]
thenecho "有读权限"
elseecho "没有读权限"
fiecho "------------------------"
if [ -w $FE ]
thenecho "有写权限"
elseecho "没有写权限"
fi
echo "------------------------"
if [ -x $FE ]
thenecho "有执行权限"
elseecho "没有执行权限"
fi
- 运行结果:
请输入文件名:f4.sh
有读权限
------------------------
有写权限
------------------------
没有执行权限
- if分支语句判断文件的Inode的异同:
- 所使用的选项:
-ef
- 终端
查看Inode
的命令:stat 文件名
- 特别注意:
- 不同为假,相同为真;
硬链接
文件Inode一致
;- 测试代码:
#!/bin/bashread -p "请输入文件1名称" FE1
read -p "请输入文件2名称" FE2if [ $FE1 -ef $FE2 ]
thenecho "相同"elseecho "不同"
fi
- 运行结果:
#第一次运行
请输入文件1名称f1.sh
请输入文件2名称f2.sh
不同
#第二次运行
请输入文件1名称f1.sh
请输入文件2名称f1.sh
相同
- if分支语句对字符串的判断:
- 判断字符串是否为空:
-z
- 判断字符串是否为非空:
-n
- 判断字符串是否相等:
=
OR==
- 判断字符串是否不等:
!=
- 判断字符串是否大小:
\<
OR\>
- 特别注意:
- 引用字符串时,要加
双引号" "
; - 测试代码:
#!/bin/bashread -p "请输入字符串1:" STR1
read -p "请输入字符串2:" STR2if [ -z "$STR1" ]
thenecho "STR1空"elseecho "STR1不空"fiecho "--------------------------"if [ -n "$STR2" ]
thenecho "STR2不空"elseecho "STR2空"fi
echo "--------------------------"if [ "$STR1" == "$STR2" ]
thenecho "STR1 = STR2"elif [ "$STR1" \> "$STR2" ]
thenecho "STR1 > STR2"
elseecho "STR1 < STR2"
fi
- 运行结果:
请输入字符串1:hello
请输入字符串2:helle
STR1不空
--------------------------
STR2不空
--------------------------
STR1 > STR2
- if分支语句判断文件的时间戳:
- 判断文件1是否比文件2更新:
-nt
- 判断文件1是否比文件2更旧:
-ot
- 特别注意:
- 比较的是文件1和文件2的最后一次修改时间;
- 测试代码:
#!/bin/bashread -p "输入文件1的文件名:" FE1
read -p "输入文件2的文件名:" FE2if [ $FE1 -nt $FE2 ]
thenecho "文件1比文件2更新"
elseecho "文件1比文件2更旧"
fiecho "---------------------------"if [ $FE1 -ot $FE2 ]
thenecho "文件1比文件2更旧"
elseecho "文件1比文件2更新"
fi
- 运行结果:
#第一次运行
输入文件1的文件名:f1.sh
输入文件2的文件名:f2.sh
文件1比文件2更旧
---------------------------
文件1比文件2更旧
#第二次运行
输入文件1的文件名:f3.sh
输入文件2的文件名:f2.sh
文件1比文件2更新
---------------------------
文件1比文件2更新
- 实例要求:
- 1.判断当前路径下是否存在名称为
dir_DIR的文件
,若存在,输入'Y'
清空,若不存在,自动新建目录文件dir_DIR
; - 2.判断当前路径下是否存在名称为
file_DIR的文件
,若存在,输入'Y'
清空,若不存在,自动新建目录文件file_DIR
; - 3.根据提示信息,输入一个路径,将该路径下普通文件和目录文件进行分类,并且复制到目录文件dir_DIR和file_DIR中,需要统计具体多少个普通文件和多少个目录文件,并列举出所复制的所有文件;
- 测试代码:
#!/bin/bashDIR_PATH=$HOME/xxxx/dir_DIR
FILE_PATH=$HOME/xxxx/file_DIRif [ -e $DIR_PATH ]
thenecho "存在dir_DIR文件"read -p "是否清空,请输入[Y/N]>>" Cif [ $C == "Y" ]thenrm -rf $DIR_PATHelseecho "退出脚本"exitfifi
echo "新建目录文件dir_DIR"
mkdir $DIR_PATHif [ -e $FILE_PATH ]
thenecho "存在file_DIR文件"read -p "是否清空,请输入[Y/N]>>" Cif [ $C == "Y" ]thenrm -rf $FILE_PATHelseecho "退出脚本"exitfifi
echo "新建目录文件file_DIR"
mkdir $FILE_PATHFILE_NUM=0
DIR_NUM=0read -p "请输入一个路径>>" Pafor i in `ls $Pa`
doif [ -f $Pa/$i ]thencp $Pa/$i $FILE_PATH((FILE_NUM++))elif [ -d $Pa/$i ]thencp -r $Pa/$i $DIR_PATH((DIR_NUM++))fi
doneecho "-----该路径下的普通文件和目录文件分类已完成-----"
echo "总共复制了 $FILE_NUM 个普通文件"
echo "分别是:"
ls $FILE_PATH
echo "总共复制了 $DIR_NUM 个目录文件"
echo "分别是:"
ls $DIR_PATH
- 运行结果:
#第一次执行
新建目录文件dir_DIR
新建目录文件file_DIR
请输入一个路径>>/home/linux/xxxx/dir1
-----该路径下的普通文件和目录文件分类已完成-----
总共复制了 4 个普通文件
分别是:
file1 file2 file3 file4
总共复制了 5 个目录文件
分别是:
dir2 dir3 dir4 dir5 dir6#第二次执行
存在dir_DIR文件
是否清空,请输入[Y/N]>>Y
新建目录文件dir_DIR
存在file_DIR文件
是否清空,请输入[Y/N]>>Y
新建目录文件file_DIR
请输入一个路径>>/home/linux/xxxx/dir1
-----该路径下的普通文件和目录文件分类已完成-----
总共复制了 4 个普通文件
分别是:
file1 file2 file3 file4
总共复制了 5 个目录文件
分别是:
dir2 dir3 dir4 dir5 dir6
相关文章:
Shell编程学习之if分支语句的应用
Shell编程中的if分支语句:伪代码表示:注意符号和表达式之间的空格; if [ 表达式1 ] then分支1 elif [ 表达式2 ] then分支2 elif [ 表达式3 ] then分支3 else其它 fi按整型的方式,if分支语句比较字符串的大小:等于&am…...

2023.8 - java - 泛型
泛型问题的引出: jdk 1.5 引出泛型 // package 泛型; public class index {public static void main (String[] args){test t new test();t.setContent("aaa");int a (int) t.getContent();System.out.println(a);} }class test{Object content;publi…...

【数据结构练习】链表面试题锦集一
目录 前言: 1. 删除链表中所有值为key的节点 方法一:正常删除,头结点另外讨论 方法二:虚拟头结点法 方法三:递归 2.反转链表 方法一:双指针迭代 方法二:递归法解析: 3.链表的中间结点 方法…...
自然语言处理从入门到应用——LangChain:链(Chains)-[通用功能:SequentialChain和TransformationChain]
分类目录:《自然语言处理从入门到应用》总目录 SequentialChain 在调用语言模型之后,下一步是对语言模型进行一系列的调用。若可以将一个调用的输出作为另一个调用的输入时则特别有用。在本节中,我们将介绍如何使用顺序链来实现这一点。顺序…...

什么是卷积神经网络
目录 什么是卷积神经网络 全链接相对笨重:大胖子编辑 编辑 参数众多:容易造成过拟合 编辑 卷积核:进行图像特征提取,源于卷积原理:求相交面积 卷积的作用 卷积的意义 编辑 通过卷积核减少参数 深度卷积…...

银行数字化转型程度-根据年报词频计算(2012-2021年)
银行数字化转型程度是根据银行年报中的数字化相关词频计算所得的数据。这一数据包括数字化词频关键词、以及数字化转型程度,反映了银行数字化转型的程度和进展情况。从经济学研究的角度来看,这一数据具有重要的参考价值。 首先,银行数字化转…...

微信开发之一键修改群聊备注的技术实现
修改群备注 修改群名备注后,如看到群备注未更改,是手机缓存问题,可以连续点击进入其他群,在点击进入修改的群,再返回即可看到修改后的群备注名,群名称的备注仅自己可见 请求URL: http://域名地…...

[oneAPI] 基于BERT预训练模型的SQuAD问答任务
[oneAPI] 基于BERT预训练模型的SQuAD问答任务 Intel Optimization for PyTorch and Intel DevCloud for oneAPI基于BERT预训练模型的SQuAD问答任务语料介绍数据下载构建 模型 结果参考资料 比赛:https://marketing.csdn.net/p/f3e44fbfe46c465f4d9d6c23e38e0517 Int…...
机器学习笔记之优化算法(十七)梯度下降法在强凸函数的收敛性分析
机器学习笔记之优化算法——梯度下降法在强凸函数的收敛性分析 引言回顾:梯度下降法在强凸函数的收敛性二阶可微——梯度下降法在强凸函数的收敛性推论 引言 上一节介绍并证明了:梯度下降法在强凸函数上的收敛速度满足 Q \mathcal Q Q-线性收敛。 本节将…...

shell脚本中linux命令的特殊用法记录
shell脚本中linux命令的特殊用法记录 1、linux命令特殊参数选项1.1、sed -e1.2、echo -e 2、 shell 扩展2.1、[[ ]]支持用~进行正则匹配 3、特殊命令用法3.1、{} 变量替换 1、linux命令特殊参数选项 1.1、sed -e sed -e以严格模式执行脚本,在sed -e 后面的所有命令…...

Nvidia H100:今年55万张够用吗?
原文标题:Nvidia H100: Are 550,000 GPUs Enough for This Year? 作者:Doug Eadline August 17, 2023 The GPU Squeeze continues to place a premium on Nvidia H100 GPUs. In a recent Financial Times article, Nvidia reports that it expects to…...
【Vue2.0源码学习】生命周期篇-初始化阶段(initLifecycle)
文章目录 1. 前言2. initLifecycle函数分析3. 总结 1. 前言 在上篇文章中,我们介绍了生命周期初始化阶段的整体工作流程,以及在该阶段都做了哪些事情。我们知道了,在该阶段会调用一些初始化函数,对Vue实例的属性、数据等进行初始…...

Android开发基础知识总结(三)简单控件(上)
一.文本显示 考虑到结构样式相分离的思想,我们往往在XML中设置文本 <TextViewandroid:layout_width"342dp"android:layout_height"70dp"android:text"房价计算器"android:layout_gravity"center"android:textColor"…...

在Qt窗口中添加右键菜单
在Qt窗口中添加右键菜单 基于鼠标的事件实现流程demo 基于窗口的菜单策略实现Qt::DefaultContextMenuQt::ActionsContextMenuQt::CustomContextMenu信号API 基于鼠标的事件实现 流程 需要使用:事件处理器函数(回调函数) 在当前窗口类中重写鼠标操作相关的的事件处理器函数&a…...

Day8 智慧商城
项目演示 项目收获 创建项目 调整初始化目录 1.删components里的所有文件 2.删views里的所有文件 3.router/index.js 删路由 删规则 import Vue from vue import VueRouter from vue-routerVue.use(VueRouter)const router new VueRouter({routes: [] })export default route…...

LeetCode:Hot100python版本之回溯
回溯算法其实是纯暴力搜索。for循环嵌套是写不出的 组合:没有顺序 排列:有顺序 回溯法可以抽象为树形结构。只有在回溯算法中递归才会有返回值。 46. 全排列 排列是有顺序的。 组合类问题用startindex,排序类问题用used,来标…...

分布式事务理论基础
今天啊,本片博客我们一起来学习一下微服务中的一个重点和难点知识:分布式事务。 我们会基于Seata 这个框架来学习。 1、分布式事务问题 事务,我们应该比较了解,我们知道所有的事务,都必须要满足ACID的原则。也就是 …...

线性代数强化第三章
目录 一,关于A伴随,A逆与初等矩阵 二,分块矩阵 三,矩阵方程 一,关于A伴随,A逆与初等矩阵 如何证明行列式的值不能是0; 此秩为1. 法一: 法二: 不用看是列变换还是行变…...
搭建自己的私有 开源LoRaWAN 网络服务器(The ThingsStack)---之配置
介绍 这是使用 Docker 在您自己的硬件上安装 Things Stack Enterprise 或开源代码以运行您自己的私有 LoRaWAN 网络服务器的指南。 运行 The Things Stack 的方法有多种。 Things Stack 开源和企业发行版旨在在您自己的硬件上运行,本指南也对此进行了介绍。 对于具有高吞吐量的…...

多维时序 | MATLAB实现SCNGO-CNN-Attention多变量时间序列预测
多维时序 | MATLAB实现SCNGO-CNN-Attention多变量时间序列预测 目录 多维时序 | MATLAB实现SCNGO-CNN-Attention多变量时间序列预测预测效果基本介绍程序设计参考资料 预测效果 基本介绍 1.SCNGO-CNN-Attention超前24步多变量回归预测算法。 程序平台:无Attention适…...

业务系统对接大模型的基础方案:架构设计与关键步骤
业务系统对接大模型:架构设计与关键步骤 在当今数字化转型的浪潮中,大语言模型(LLM)已成为企业提升业务效率和创新能力的关键技术之一。将大模型集成到业务系统中,不仅可以优化用户体验,还能为业务决策提供…...
【位运算】消失的两个数字(hard)
消失的两个数字(hard) 题⽬描述:解法(位运算):Java 算法代码:更简便代码 题⽬链接:⾯试题 17.19. 消失的两个数字 题⽬描述: 给定⼀个数组,包含从 1 到 N 所有…...
AI编程--插件对比分析:CodeRider、GitHub Copilot及其他
AI编程插件对比分析:CodeRider、GitHub Copilot及其他 随着人工智能技术的快速发展,AI编程插件已成为提升开发者生产力的重要工具。CodeRider和GitHub Copilot作为市场上的领先者,分别以其独特的特性和生态系统吸引了大量开发者。本文将从功…...

GO协程(Goroutine)问题总结
在使用Go语言来编写代码时,遇到的一些问题总结一下 [参考文档]:https://www.topgoer.com/%E5%B9%B6%E5%8F%91%E7%BC%96%E7%A8%8B/goroutine.html 1. main()函数默认的Goroutine 场景再现: 今天在看到这个教程的时候,在自己的电…...

FFmpeg:Windows系统小白安装及其使用
一、安装 1.访问官网 Download FFmpeg 2.点击版本目录 3.选择版本点击安装 注意这里选择的是【release buids】,注意左上角标题 例如我安装在目录 F:\FFmpeg 4.解压 5.添加环境变量 把你解压后的bin目录(即exe所在文件夹)加入系统变量…...
Linux系统部署KES
1、安装准备 1.版本说明V008R006C009B0014 V008:是version产品的大版本。 R006:是release产品特性版本。 C009:是通用版 B0014:是build开发过程中的构建版本2.硬件要求 #安全版和企业版 内存:1GB 以上 硬盘…...

数据结构第5章:树和二叉树完全指南(自整理详细图文笔记)
名人说:莫道桑榆晚,为霞尚满天。——刘禹锡(刘梦得,诗豪) 原创笔记:Code_流苏(CSDN)(一个喜欢古诗词和编程的Coder😊) 上一篇:《数据结构第4章 数组和广义表》…...

数据挖掘是什么?数据挖掘技术有哪些?
目录 一、数据挖掘是什么 二、常见的数据挖掘技术 1. 关联规则挖掘 2. 分类算法 3. 聚类分析 4. 回归分析 三、数据挖掘的应用领域 1. 商业领域 2. 医疗领域 3. 金融领域 4. 其他领域 四、数据挖掘面临的挑战和未来趋势 1. 面临的挑战 2. 未来趋势 五、总结 数据…...
自定义线程池1.2
自定义线程池 1.2 1. 简介 上次我们实现了 1.1 版本,将线程池中的线程数量交给使用者决定,并且将线程的创建延迟到任务提交的时候,在本文中我们将对这个版本进行如下的优化: 在新建线程时交给线程一个任务。让线程在某种情况下…...

基于谷歌ADK的 智能产品推荐系统(2): 模块功能详解
在我的上一篇博客:基于谷歌ADK的 智能产品推荐系统(1): 功能简介-CSDN博客 中我们介绍了个性化购物 Agent 项目,该项目展示了一个强大的框架,旨在模拟和实现在线购物环境中的智能导购。它不仅仅是一个简单的聊天机器人,更是一个集…...