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

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

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

相关文章

【Unity3D赛车游戏】【三】如何将汽车进入驱动模式——四驱,二驱转换

&#x1f468;‍&#x1f4bb;个人主页&#xff1a;元宇宙-秩沅 &#x1f468;‍&#x1f4bb; hallo 欢迎 点赞&#x1f44d; 收藏⭐ 留言&#x1f4dd; 加关注✅! &#x1f468;‍&#x1f4bb; 本文由 秩沅 原创 &#x1f468;‍&#x1f4bb; 收录于专栏&#xff1a;Uni…

JavsScript知识框架

JavaScript学习框架性总结 要系统性地精通 JavaScript&#xff0c;需要涵盖广泛的知识点&#xff0c;从基础到高级。以下是一些需要掌握的关键知识点&#xff08;当然不止这些&#xff09;&#xff1a; 基础语法和核心概念&#xff1a; 变量、数据类型、运算符作用域闭包this …

Linux服务——http协议及nginx服务

目录 一、HTTP协议 1、跨网络的主机间通讯方式 套接字相关的系统调用 2、HTTP协议访问网站的过程 3、http协议状态码分类 常见的http协议状态码 4、MIME 5、URL组成 6、HTTP协议版本 7、系统处理http请求的工作模式 8、apache与nginx的区别 二、I/O模型 I/O模型相关…

建议收藏|软考机构推荐看这一篇就够了

需要最近因为软考改革成机考&#xff0c;大家都在问还有没有必要找机构学&#xff1f;本来已经进入自学阶段的考生&#xff0c;也纷纷开始慌张机考改革会不会影响考试难度&#xff1f;今天胖圆给大家总结一下软考要不要报机构&#xff1f;市面上的软考培训机构如何选择&#xf…

使用Xshell7控制多台服务同时安装ZK最新版集群服务

一: 环境准备: 主机名称 主机IP 节点 (集群内通讯端口|选举leader|cline端提供服务)端口 docker0 192.168.1.100 node-0 2888 | 3888 | 2181 docker1 192.168.1.101 node-1 2888 | 388…

Git学习

目录 Git常用操作流程&#xff1a; 1 版本查看&#xff1a; 2 在github上建立远程仓库&#xff1a; 3 连接ssh 4 配置用户名和邮箱 5 克隆远程仓库到本地 6 添加新文件在本地 7 提交 8 推送 9 git补充 三种状态&#xff1a; 命令&#xff1a; Git常用操作流程&#…

wireshark | 过滤筛选总结

wireshark 是一款开源抓包工具。比如与服务器的请求响应、tcp三次握手/四次挥手 场景&#xff1a;在linux环境下使用tcpdump -w 然后把爬的数据写入指定的XXX.pcap 然后在wireshark中导入该文件XXX.pcap 使用下面的过滤方式进行过滤 分析数据就可以了 #直接看 不需要硬背 和s…

共享数据-vue3

vuex方案 安装vuex4.x 两个重要变动&#xff1a; 去掉了构造函数Vuex&#xff0c;而使用createStore创建仓库 为了配合composition api&#xff0c;新增useStore函数获得仓库对象&#xff1b;获取路由对象使用useRouter global state 由于vue3的响应式系统本身可以脱离…

Python分享之redis

String 操作 redis中的String在在内存中按照一个name对应一个value来存储 set() #在Redis中设置值&#xff0c;默认不存在则创建&#xff0c;存在则修改 r.set(name, zhangsan) 参数&#xff1a; set(name, value, exNone, pxNone, nxFalse, xxFalse) ex&#xff…

【Python】强化学习:原理与Python实战

搞懂大模型的智能基因&#xff0c;RLHF系统设计关键问答 RLHF&#xff08;Reinforcement Learning with Human Feedback&#xff0c;人类反馈强化学习&#xff09;虽是热门概念&#xff0c;并非包治百病的万用仙丹。本问答探讨RLHF的适用范围、优缺点和可能遇到的问题&#xff…

【腾讯云 TDSQL-C Serverless 产品测评】“橡皮筋“一样的数据库『MySQL高压篇』

【腾讯云 TDSQL-C Serverless 产品测评】"橡皮筋"一样的数据库 活动介绍服务一览何为TDSQL &#xff1f;Serverless 似曾相识&#xff1f; 降本增效&#xff0c;不再口号&#xff1f;动手环节 --- "压力"山大实验前瞻稍作简介资源扩缩范围&#xff08;CCU&…

19篇ICCV 2023自动驾驶精选论文解析 | 涵盖3D目标检测、语义分割、点云等方向

ICCV 2023榜单上月已出&#xff0c;今年共收录了2160篇论文&#xff0c;这次是精选了今年ICCV 2023 会议中自动驾驶相关的最新论文来和大家分享&#xff0c;涵盖了3D目标检测、BEV感知、目标检测、语义分割、点云等方向&#xff0c;共19篇。 论文原文以及开源代码文末领取&…

8_分类算法-k近邻算法(KNN)

文章目录 1 KNN算法1.1 KNN算法原理1.2 KNN过程1.3 KNN三要素1.4 KNN分类预测规则1.5 KNN回归预测规则1.6 KNN算法实现方式&#xff08;重点&#xff09;1.7 k近邻算法优缺点 2 KD-Tree2.1 KD Tree构建方式2.2 KD Tree查找最近邻2.3 KNN参数说明 1 KNN算法 定义&#xff1a;如…

开悟Optimization guide for intermediate tracks

目录 认识模型 参考方案&#xff08;按模块拆解&#xff09; 认识模型 模型控制1名英雄进行镜像1 v 1对战 Actor集群资源为64核CPU 问题特点&#xff1a;单一公平对抗场景&#xff08;同英雄镜像对赛&#xff09;&#xff0c;单位时间样本产能低&#xff0c;累计训练资源相…

基于OpenCV实战(基础知识一)

目录 简介 1.计算机眼中的图像 2.图片的读取、显示与保存 3.视频的读取与显示 简介 OpenCV是一个流行的开源计算机视觉库&#xff0c;由英特尔公司发起发展。它提供了超过2500个优化算法和许多工具包&#xff0c;可用于灰度、彩色、深度、基于特征和运动跟踪等的图像处理和…

JMeter性能测试(中)

断言 让程序自动判断预期结果和实际结果是否一致。 响应断言 例子2&#xff1a;可以在同一个HTTP请求下包含多个响应断言 例子1&#xff1a; 步骤; 添加线程组添加HTTP请求添加响应断言 测试字段&#xff1a;要检查的项&#xff08;实际结果&#xff09;模式匹配规则&#…

iFluor 594 Styramide是一种荧光染料,常用于生物分子标记和成像

试剂 | 基础知识概述&#xff08;部分&#xff09;: 中文名称&#xff1a;Alexa Fluor 594酪Styramide 分子量&#xff1a;1341.71 胺的优异替代品 100 Slides 英文名称&#xff1a;iFluor 594 Ex (nm)&#xff1a;588 Em (nm)&#xff1a;604 规格标准&#xff1a;1g&am…

react-sortable-hoc 拖拽列表上oncick事件失效

const SortableItem SortableElement(({value, onChangePayment}) > {const onClickItem () > {// todo}return (<View className"-item" onClick{onClickItem}>xxxxxxx</View>) })问题&#xff1a;onClick 无效 解决&#xff1a;添加distance

[Makefile] 预宏定义的使用

main.c 文件如下&#xff1a; #include <stdio.h> int main() {printf("soft infomation\n");//以下信息均在gcc时已预定义printf("soft_ver:\t%s\n",__VER__);printf("author:\t\t%s\n",__AUTHOR__);printf("sn_num:\t\t%d\n"…

6种方法Word中的页眉横线如何删除

01 如何给Word添加页眉&#xff1f; 方法1&#xff1a; 打开Word文档&#xff0c;将鼠标放在Word顶部&#xff0c;双击鼠标&#xff0c;就可以进入页眉编辑状态&#xff0c;这时候&#xff0c;直接添加页眉内容就好了。 方法2&#xff1a; 在Word文档顶部菜单栏点击【插入】…