Shell运维实战2-条件判断与函数

news/2024/11/20 0:34:27/

目录

      • Shell 条件测试与比较
        • 脚本条件测试
        • 文本测试表达式
        • 字符串测试表达式
        • 整数二元比较操作符
        • 逻辑操作符
        • 区别总结
      • if 语句
      • Shell 函数
        • 基础执行

Shell 条件测试与比较


脚本条件测试

# -f判断文件是否存在,如果存在返回真,反之为假
# 一下结构类似于三元运算符,文件存在则执行true,不存在则执行false
test -f file && echo true || echo false# 使用中括号包裹test所有参数及其对应值
# 中括号左右端都必须预留一个空格距离,否则报错
test [ -f file ] && echo 1 || echo 2

一般的,都建议运算符号之间没有距离(即没有很多空格阻隔)


文本测试表达式

在这里插入图片描述

# 对单个文件变量进行测试
[ -f "$fileval" ] && echo 1 || echo 0

实际开发中常用的条件判断语句模板

如果条件返回 true,则执行大括号内的所有指令

[ 条件 ] &&{命令1命令2命令3
}

字符串测试表达式

使用时特别注意空格间距的安排!

# -n "abs" 若字符串长度非0,返回true
[ -n "abs" ] && echo 1 || echo 0# -z "abs" 若字符串长度为0,返回true
[ -n "" ] && echo 1 || echo 0

整数二元比较操作符

在这里插入图片描述

编写时分为两种情况,按照上图针对性使用

[[]](())内也可以使用文字式比较符号,但是不推荐!

[ 2 -eq 1 ] && echo 1 || echo 0
[[ 2 > 10 ]] && echo 1 || echo 0(($num1<$num2)) && echo 1 || echo 0

不建议在正式工作中使用 [[]] ,因为它比较复杂,这会为开发带来很多麻烦

三种形式使用到的符号总结

  • 整数加双引号的比较是对的。
  • [[]]中用类似-eq等的写法是对的,[[]]中用类似>、<的写法也可能不对,有可能会只比较第一位,逻辑结果不对。
  • []中用类似>、<的写法在语法上虽然可能没错,但逻辑结果不对,可以使用=、! =正确比较。
  • (())中不能使用类似-eq等的写法,可以使用类似>、<的写法。

逻辑操作符

与或非运算,除了在 [] 内可以使用字符式表达,其余两个可以使用对应的原始符号(如&&)

[ 1 -a 1 ] # 相当于 &&
[ 1 -o 1 ] # 相当于 ||
[ 1 ! 1 ] # 相当于 !

区别总结

在这里插入图片描述


if 语句


# 基础判断语句
# if开头,then衔接,fi结尾
if  <条件表达式>then指令
fi# 双分支结构
if  <条件表达式>then指令集1
else指令集2
fi# 多分支结构
if  <条件表达式1>then指令1
elif <条件表达式2>then指令2
else指令3
fi

除此之外,if 还可以结合 测试表达式test、[]、[[]]、(()) 作为判断条件使用


Shell 函数


基础执行

shell 中定义函数有三种办法

# 标准格式
function demo1(){}# 有function修饰的情况下可不写小括号
function demo2{}# 无function修饰必须要有小括号
demo3(){}

特别注意,由于 ubuntu 中 sh 和 bash 相互冲突的关系,执行脚本时务必使用 bash 命令,否则当你使用 function 定义函数的时候会一直报错!!!



http://www.ppmy.cn/news/89134.html

相关文章

C Primer Plus第六章编程练习答案

学完C语言之后&#xff0c;我就去阅读《C Primer Plus》这本经典的C语言书籍&#xff0c;对每一章的编程练习题都做了相关的解答&#xff0c;仅仅代表着我个人的解答思路&#xff0c;如有错误&#xff0c;请各位大佬帮忙点出&#xff01; 1.编写一个程序&#xff0c;创建一个包…

28所示范性微电子院校占地面积排名,中山大学第一!

01中山大学13725 中山大学简称中大&#xff0c;现有广州、珠海和深圳三校区五校园&#xff0c;占地面积共计13725亩。1924年&#xff0c;孙中山亲手将广州地区多所高校整合创立国立广东大学。1926年定名为国立中山大学。如今该校由1952年院系调整后分设的中山大学和中山医科大学…

C++【实现AVL树】

文章目录 一、AVL树的概念及性能二、AVL树结点的创建三、AVL树的插入四、四种旋转&#xff08;1&#xff09;LL-左单旋&#xff08;2&#xff09;RR-右单旋&#xff08;3&#xff09;LR-左右旋&#xff08;4&#xff09;RL-右左旋 五、判断AVL树六、测试结果七、源代码(1) AVL_…

电源大师课-初阶

第一课 电源系统构成和基础原理 1-电源效率 总的Pout除以Pin 2-输出电压调整率 源调整率(输入电压变化时&#xff0c;输出稳定程度) 负载调整率(输出负载变化时&#xff0c;输出稳定度) 温度调整率(工作环境温度在极限情况下&#xff0c;输出的稳定度) 3-纹波测试(20MHz、最…

Day52【动态规划】300.最长递增子序列、674.最长连续递增序列、718.最长重复子数组

300.最长递增子序列 力扣题目链接/文章讲解 视频讲解 1、确定 dp 数组下标及值含义 本题中&#xff0c;正确定义dp数组的含义十分重要 dp[i]&#xff1a;下标 i 表示以 nums[i] 结尾的最长递增子序列&#xff0c;dp[i] 的值表示该子序列长度的 2、确定递推公式 要求 d…

【Flutter 工程】003-钩子函数:Flutter Hooks

【Flutter 工程】003-钩子函数&#xff1a;Flutter Hooks 文章目录 【Flutter 工程】003-钩子函数&#xff1a;Flutter Hooks一、概述1、前言2、Flutter Hooks 概述 二、useState 基本使用0、计数器官方 demo1、安装 flutter_hooks2、代码改造3、运行结果4、神奇的事情 三、使用…

HTTP中 Connection: keep-Alive与TCP中中keepalive有什么区别?

有小伙伴不明白keep-Alive和keepalive有什么区别&#xff1f;今天写这篇文章详细讲清楚&#xff01; HTTP是请求响应模型也就是客户端发起了请求&#xff0c;服务端才会返回响应&#xff0c;一来一回。 由于 HTTP 是基于 TCP 传输协议实现的&#xff0c;客户端与服务端要进行 H…

RESTful API介绍

RESTful API&#xff08;Representational State Transfer&#xff09;是一种设计 Web 应用程序的架构风格&#xff0c;它使用 HTTP 请求来进行数据传输和交互。 RESTful API 的核心思想是将资源&#xff08;比如用户、订单、产品&#xff09;作为 Web 上的唯一标识&#xff0…