Linux脚本(if、else、case、test中括号)

文章目录

  • if else 值比较
  • if 逻辑测试
  • if test
  • if [] 与[[]]
  • if字符串比较校验
  • if文件校验
  • case基本结构
  • case字符串
  • case或(|)
  • case通配符
  • case 通配符组合使用

if else 值比较

注意:if []中两边有空格,if和中括号之间也有空格,变量=两边无空格

比较符号说明
-eq等于Equal
-ne不等于Not Equal
-lt小于Lesser Than
-le小于等于Lesser or Equal
-gt大于Greater Than
-ge大于等于Greater or Equal

逻辑运算or(||、-o) and(&&、-a)

then可以另起行:

#!/bin/bashage=$1
if [ $age -ge 20 ] && [ $age -lt 30 ] 
then echo "年轻人"
elif [ $age -ge 30 ] && [ $age -lt 60 ]
then echo "青年人"
else echo "老年人"
fi

如果if和then同行,得加分号(😉

#!/bin/bashage=$1
if [ $age -ge 20 ] && [ $age -lt 30 ]; thenecho "年轻人"
elif [ $age -ge 30 ] && [ $age -lt 60 ]; thenecho "青年人"
else   echo "老年人"
fi     

推荐then单独占一行,并且提供缩进,这样看起来更美观一点:

#!/bin/bashage=$1
if [ $age -ge 20 ] && [ $age -lt 30 ] 
then echo "年轻人"
elif [ $age -ge 30 ] && [ $age -lt 60 ]
then echo "青年人"
else echo "老年人"
fi

缩进

if 逻辑测试

#!/bin/bashenglish=$1
math=$2if [ $english -ge 90 ] && [ $math -gt 90 ];thenecho "优秀"
elif [ $english -ge 90 ] || [ $math -gt 90 ];thenecho "请继续加油哦"
else echo "努力吧,少年"
fiif [ $english -ge 90 -a $math -gt 90 ];thenecho "优秀"
elif [ $english -ge 90 -o $math -gt 90 ];thenecho "请继续加油哦"
else echo "努力吧,少年"
fi

注意:

  1. &&、||是在命令之间,2个[]之间,[xx] && [xx]
  2. -a -o在一个[]之内,[ xx -o xx ]

逻辑运算

if test

可以使用test来代替中括号([])

#!/bin/bashenglish=$1
math=$2if test $english -ge 90 -a  $math -gt 90;thenecho "优秀"
elif test $english -ge 90  -o  $math -gt 90;thenecho "请继续加油哦"
else echo "努力吧,少年"
fi

if [] 与[[]]

简单点说,[[]]是bash扩展,比[]支持更多,如:

  1. 数字比较可以使用==、!=、<、<=、>、>=
  2. 变量和字符串的引号可以省略
  3. 支持正则匹配

[[]]支持正则匹配很多时候就非常方便了:

#!/bin/bashstr="Hello World"# 是否包含子串
if [[ $str == *World* ]]; thenecho "$str 包含子串:World"
elseecho "$str 不包含子串:World"
fi# 模式匹配
if [[ $str =~ ^Hello.*World$ ]]; thenecho "匹配成功"
elseecho "匹配失败"
fi
#!/bin/bashv1="zabc"
v2="z*"echo "变量v1:$v1"
echo "变量v2:$v2"if [[ older == old?? ]];thenecho "[[]]模式匹配成功"
elseecho "[[]]模式匹配失败"
fiif [ older == old?? ];thenecho "[]模式匹配成功"
elseecho "[]模式匹配失败"
fiif [[ $v1 == z* ]];thenecho "\$v1 == \"z*\":模式匹配z*,成功"
elseecho "\$v1 == \"z*\":模式匹配z*,失败"
fiif [[ $v1 == "z*" ]];thenecho "\$v1 == \"z*\":精确匹配字符z*,成功"
elseecho "\$v1 == \"z*\":精确匹配字符z*,失败"
fiif [[ $v2 == "z*" ]];thenecho "\$v2 == \"z*\":精确匹配字符z*,success"
elseecho "\$v2 == \"z*\":精确匹配字符z*,failure"
fiif [[ "$v1" < "$v2" ]];thenecho "[[]]<不需要转义,>="
elseecho "[[]]<不需要转义,<"
fiif [ "$v1" \< "$v2" ];thenecho "[]<需要转义,>="
elseecho "[]<需要转义,<"
fi

if字符串比较校验

比较符号说明
-z str如果str长度为零,则为真
-n str如果str长度非零,则为真
str1 = str2相等,则为真
str1 != str2不等,则为真
#!/bin/bashfunction log() {if [ -z $2 ];thenecho "错误message"fiif [ -n $2 ];thenecho "message长度:${#1}"fiif [ $1 == "info" ]; thenecho -e "info\t$2"elif [ $1 == "error" ]; thenecho -e "error\t$2"elif [ $1 == "debug" ]; thenecho -e "debug\t$2"fi
}log info
log error "出错了"

if文件校验

比较符号说明
-e filenamefilename存在,则为真
-d filenamefilename为目录,则为真
-f filenamefilename为常规文件,则为真
-L filenamefilename为符号链接,则为真
-r filenamefilename可读,则为真
-w filenamefilename可写,则为真
-x filenamefilename可执行,则为真
-s filenamefilename大小不为0,则为真
f1 -nt f2如果文件f1比f2新,则为真
f1 -ot f2如果文件f1比f2旧,则为真

test目录不存在(通过检查是否是目录的方式),创建目录:

#!/bin/shdir="test"
if [ ! -d $dir ]; thenecho "$dir 不存在,创建目录"mkdir "$dir"
elseecho "$dir 目录已经存在"
fi

文件不存在,创建文件:

#!/bin/shvimConfig=~/.vimrcif test ! -f "$vimConfig"; thenecho "vim配置文件不存在,创建文件"echo "set nu" > $vimConfig
elseecho "vim配置文件已经存在"
fiif test -s "$vimConfig"; thenecho "vim配置文件不为空"
elseecho "vim配置文件空,为配置文件设置显示行号"echo "set nu" > $vimConfig
fi

case基本结构

#!/bin/bashnum=2case $num in 
1) echo "the num is one"
;;
2) echo "the num is two"
;;
*) echo "the num is not one two"
esac
  1. ;;固定结果,相当于break
  2. *)相当于default

case字符串

#!/bin/bashstr="aaa"case $str in
aaa)echo "优秀"
;;
bbb)echo "中等"
;;
ccc)echo "及格"
;;
ddd)echo "不及格"
;;
*)echo "WTF"
esac

case或(|)

#!/bin/bashop="s"case $op in
yes|YES|y|Y)echo "选择yes";;
no|NO|n|N)echo "选择no";;
esac

case通配符

支持*、? []

#!/bin/bashstr="1"case "$str" in
[a-z]|[A-Z])echo "你输入1个字母"
;;
[0-9])echo "你输入1个数字"
;;
*)echo "你输入的是其他字符"
esacstr="123"case "$str" in
[a-z]|[A-Z])echo "你输入1个字母"
;;
[0-9])echo "你输入1个数字"
;;
*)echo "你输入的是其他字符"
esac

shell中没有不能匹配个数,类似于正则[0-9]{3,7}这种

case 通配符组合使用

#!/bin/bashcase $1 in
*.txt)echo "这是一个文本文件";;
*.jpg | *.png)echo "这是一个图形文件";;
????.xlsx)echo "这是4个字符的Excel文件"
;;
*)echo "该文件不符合需求"
esac

Linux脚本case

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

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

相关文章

WPF+MVVM案例实战(十六)- 实现一个下拉式菜单(下)

文章目录 1、案例效果2、二级有子项菜单样式实现3、样式整理汇整4、菜单事件触发5、源代码下载1、案例效果 2、二级有子项菜单样式实现 分析菜单面板如下所示: 他其实和一级菜单有子项类似,只是指示箭头和弹出面板的位置不一样,一级菜单是底部弹出,二级菜单是右侧弹出。理…

C#二分查找算法

前言 二分查找算法是一种在有序数组中查找特定元素的搜索算法。 实现原理 二分查找的实现依赖于以下几个关键步骤&#xff1a; 计算查找范围的中间索引。 比较中间索引处的值与目标值。 根据比较结果调整查找范围&#xff08;左半部分或右半部分&#xff09;。 重复上述步…

WPF+MVVM案例实战(十五)- 实现一个下拉式菜单(上)

文章目录 1 案例效果2、图标资源下载3、功能实现1.文件创建2、菜单原理分析3、一级菜单两种样式实现1、一级菜单无子项样式实现2、一级菜单有子项样式实现 4、总结 1 案例效果 提示 2、图标资源下载 从阿里矢量素材官网下载需要的菜单图片&#xff0c;如下所示&#xff1a; …

2024快手面试算法题-生气传染

问题描述 思路分析 生气只会向后传播&#xff0c;最后一个生气的人一定是最长连续没有生气的人中的最后一个人&#xff0c;前提是前面得有一个人生气。 注意&#xff0c;一次只能传播一个人&#xff0c;比如示例1&#xff0c;第一次只会传播给第一个P&#xff0c;不会传播给第…

powerlaw:用于分析幂律分布的Python库

引言 幂律分布在游戏行业中非常重要。在免费游戏模式下&#xff0c;玩家的付费行为往往遵循幂律分布。少数“鲸鱼玩家”贡献了大部分的收入&#xff0c;而大多数玩家可能只进行少量或不进行付费。通过理解和应用幂律分布&#xff0c;游戏开发者可以更好地分析和预测玩家行为&a…

Pr 视频效果:透视

效果面板/视频效果/透视 Video Effects/Perspective Adobe Premiere Pro 的视频效果中&#xff0c;透视 Perspective效果组主要用于在二维平面的视频剪辑中模拟三维空间的透视效果。 通过调整这些效果&#xff0c;可以改变图像的视角、添加阴影、创造立体感&#xff0c;增强画面…

使用 Python 中的 pydub实现 M4A 转 MP3 转换器

在现代数字生活中&#xff0c;我们常常需要处理不同格式的音频文件。今天&#xff0c;我将与大家分享一个简单的 Python 项目&#xff0c;它使用 wxPython 创建一个图形用户界面&#xff08;GUI&#xff09;应用程序&#xff0c;能够将 .m4a 文件转换为 .mp3 文件。这个项目还将…

【Linux】进程状态相关知识详细梳理

0. 预备知识 系统调用和库函数概念 在开发角度&#xff0c;操作系统对外会表现为一个整体&#xff0c;但是会暴露自己的部分接口&#xff0c;供上层开发使用&#xff0c;这部分由操作系统提供的接口&#xff0c;叫做系统调用。 系统调用在使用上&#xff0c;功能比较基础&#…

unity搭建场景学习

unity搭建场景学习 创建场景创建gameobject创建材质&#xff0c;用于给gameobject上色拖拽材质球上色上色原理设置多个材质方式设置贴图的方式 效果设置光滑度一些预览设置菜单渲染模型与碰撞模型网格渲染参数1. materials(材质)2. lighting(光照)3. reflection probes(反射探针…

【Linux】文件系统

目录 1、认识硬件--磁盘 2、文件系统 3、软链接&&硬链接 1、认识硬件--磁盘 唯一的一个机械设备&#xff0c;也是一个外设。 我们可以把磁盘看作是由无数个扇区构成的存储介质。 要把数据存到磁盘&#xff0c;第一个要解决的问题是定位一个扇区&#xff1a;哪一面&…

Linux进阶

认识root用户(超级管理员) root账号:超级管理员账户,在任何地方都有最高权限 其它账户: 是由root权限创建来的.只能在自己的家目录用更大的权限. su和exit(切换/退出) su - 用户名 : 切换到其它用. -加载环境变量 exit 登出当前用户. 可以使用ctrl d 快捷键在前面&#xff…

单臂路由实现不同VLAN之间设备通信

转载请注明出处 本实验为单臂路由配置&#xff0c;目的为让不同VLAN之间的设备能够互相通信。 1.首先&#xff0c;按照要求配置两个pc的ip地址&#xff0c;以pc0为例子&#xff1a; 2在交换机创建vlan10和vlan20 3.划分vlan&#xff0c;pc0为vlan10的设备&#xff0c;pc1为vla…

AR基础知识:SLAM同时定位和构图

在第一部分中&#xff0c;我们了解了算法如何识别相机帧中的关键点。这些是跟踪和识别环境的基础。 对于增强现实&#xff0c;设备必须知道更多信息&#xff1a;它在世界上的 3D 位置。它通过自身与多个关键点之间的空间关系来计算这一点。这个过程称为“同时定位和地图构建”…

【数据结构-邻项消除】力扣2211. 统计道路上的碰撞次数

在一条无限长的公路上有 n 辆汽车正在行驶。汽车按从左到右的顺序按从 0 到 n - 1 编号&#xff0c;每辆车都在一个 独特的 位置。 给你一个下标从 0 开始的字符串 directions &#xff0c;长度为 n 。directions[i] 可以是 ‘L’、‘R’ 或 ‘S’ 分别表示第 i 辆车是向 左 、…

[实战-11] FlinkSql 设置时区对TIMESTAMP和TIMESTAMP_LTZ的影响

table.local-time-zone table.local-time-zoneDataStream-to-Table Conversion&#xff08;拓展知识&#xff09;代码测试flinksql代码执行结果截图1. Asia/Shanghai 结果如下2. UTC结果如下 table.local-time-zone table.local-time-zone可用于设置flinksql的时区。 flink的内…

通过哪些性能指标来评估微调后的大模型实际业务效果?【大模型行业应用落地系列】

ct) 大模型应用场景探讨 ● 通过哪些性能指标来评估微调后的大模型实际业务效果&#xff1f; **【议题说明】**本议题主要探讨评估微调后大模型在实际业务场景中效果的性能指标&#xff0c;确保模型优化与业务目标一致。探讨该议题对用户企业具有多方面的价值&#xff0c;精确…

12-Docker发布微服务

12-Docker发布微服务 Docker发布微服务 搭建SpringBoot项目 新建一个SpringBoot项目 选择依赖项Spring Web和Spring Boot Actuator 在com.qi.docker_boot下创建controller目录&#xff0c;并在该目录下创建OrderController的java类 OrderControllerjava类的内容如下&#xf…

【大语言模型】ACL2024论文-06 探索思维链COT在多模态隐喻检测中的应用

【大语言模型】ACL2024论文-06 探索思维链COT在多模态隐喻检测中的应用 目录 文章目录 【大语言模型】ACL2024论文-06 探索思维链COT在多模态隐喻检测中的应用目录摘要研究背景问题与挑战如何解决创新点算法模型1. 知识总结模块&#xff08;Knowledge Summarization Module&…

HTML CSS

目录 1. 什么是HTML 2. 什么是CSS ? 3. 基础标签 & 样式 3.1 新浪新闻-标题实现 3.1.1 标题排版 3.1.1.1 分析 3.1.1.2 标签 3.1.1.3 实现 3.1.2 标题样式 3.1.2.1 CSS引入方式 3.1.2.2 颜色表示 3.1.2.3 标题字体颜色 3.1.2.4 CSS选择器 3.1.2.5 发布时间字…

应用在汽车控制系统安全气囊的爱普生可编程晶振SG-8018CG

在汽车安全领域&#xff0c;安全气囊是保护驾乘人员生命安全的关键防线。而作为安全气囊控制系统的关键元件 —— 爱普生可编程晶振 SG - 8018CG&#xff0c;以其卓越的性能成为汽车安全的坚实守护者。 一、高精度频率输出&#xff1a;安全气囊触发的精准之选 在汽车安全气囊控…