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适…...
基础测试工具使用经验
背景 vtune,perf, nsight system等基础测试工具,都是用过的,但是没有记录,都逐渐忘了。所以写这篇博客总结记录一下,只要以后发现新的用法,就记得来编辑补充一下 perf 比较基础的用法: 先改这…...
C++使用 new 来创建动态数组
问题: 不能使用变量定义数组大小 原因: 这是因为数组在内存中是连续存储的,编译器需要在编译阶段就确定数组的大小,以便正确地分配内存空间。如果允许使用变量来定义数组的大小,那么编译器就无法在编译时确定数组的大…...
HDFS分布式存储 zookeeper
hadoop介绍 狭义上hadoop是指apache的一款开源软件 用java语言实现开源框架,允许使用简单的变成模型跨计算机对大型集群进行分布式处理(1.海量的数据存储 2.海量数据的计算)Hadoop核心组件 hdfs(分布式文件存储系统)&a…...
SiFli 52把Imagie图片,Font字体资源放在指定位置,编译成指定img.bin和font.bin的问题
分区配置 (ptab.json) img 属性介绍: img 属性指定分区存放的 image 名称,指定的 image 名称必须是当前工程生成的 binary 。 如果 binary 有多个文件,则以 proj_name:binary_name 格式指定文件名, proj_name 为工程 名&…...
A2A JS SDK 完整教程:快速入门指南
目录 什么是 A2A JS SDK?A2A JS 安装与设置A2A JS 核心概念创建你的第一个 A2A JS 代理A2A JS 服务端开发A2A JS 客户端使用A2A JS 高级特性A2A JS 最佳实践A2A JS 故障排除 什么是 A2A JS SDK? A2A JS SDK 是一个专为 JavaScript/TypeScript 开发者设计的强大库ÿ…...
[免费]微信小程序问卷调查系统(SpringBoot后端+Vue管理端)【论文+源码+SQL脚本】
大家好,我是java1234_小锋老师,看到一个不错的微信小程序问卷调查系统(SpringBoot后端Vue管理端)【论文源码SQL脚本】,分享下哈。 项目视频演示 【免费】微信小程序问卷调查系统(SpringBoot后端Vue管理端) Java毕业设计_哔哩哔哩_bilibili 项…...
android RelativeLayout布局
<?xml version"1.0" encoding"utf-8"?> <RelativeLayout xmlns:android"http://schemas.android.com/apk/res/android"android:layout_width"match_parent"android:layout_height"match_parent"android:gravity&…...
Modbus RTU与Modbus TCP详解指南
目录 1. Modbus协议基础 1.1 什么是Modbus? 1.2 Modbus协议历史 1.3 Modbus协议族 1.4 Modbus通信模型 🎭 主从架构 🔄 请求响应模式 2. Modbus RTU详解 2.1 RTU是什么? 2.2 RTU物理层 🔌 连接方式 ⚡ 通信参数 2.3 RTU数据帧格式 📦 帧结构详解 🔍…...
高考志愿填报管理系统---开发介绍
高考志愿填报管理系统是一款专为教育机构、学校和教师设计的学生信息管理和志愿填报辅助平台。系统基于Django框架开发,采用现代化的Web技术,为教育工作者提供高效、安全、便捷的学生管理解决方案。 ## 📋 系统概述 ### 🎯 系统定…...
软件工程 期末复习
瀑布模型:计划 螺旋模型:风险低 原型模型: 用户反馈 喷泉模型:代码复用 高内聚 低耦合:模块内部功能紧密 模块之间依赖程度小 高内聚:指的是一个模块内部的功能应该紧密相关。换句话说,一个模块应当只实现单一的功能…...
