Linux+Docer 容器化部署之 Shell 语法入门篇 【Shell基本运算符】

server/2025/2/4 21:03:28/

文章目录

  • 一、Shell 基本运算符
  • 二、算术运算符
  • 三、关系运算符
  • 四、布尔运算
  • 五、字符串运算符
  • 六、文件测试操作
  • 七、C Shell 操作符
    • 7.1 算术和逻辑运算符
    • 7.2 文件测试操作
  • 八、Korn Shell 运算符
    • 8.1 算术和逻辑运算符
    • 8.2 文件测试操作
  • 九、总结


在这里插入图片描述

Shell__6">一、Shell 基本运算符

有各种不同的运算符shell都支持。本教程是基于默认shell(Bourne),所以我们要涵盖所有重要的 Bourne Shell 运算符。

有以下的运算符,我们将要讨论的:

  • 算术运算符。
  • 关系运算符。
  • 布尔运算符。
  • 字符串运算符。
  • 文件测试操作。

Bourne shell 的最初并没有任何机制来执行简单的算术,但它使用外部程序,无论是 awk 或必须简单的程序 expr

下面是简单的例子,把两个数相加:

#!/bin/shval=`expr 2 + 2`
echo "Total value : $val"

这将产生以下结果:

Total value : 4

🎯记下有以下几点:

  • 运算符和表达式之间必须有空格,例如 2+2 是不正确的,因为它应该写成 2 + 2
  • ``,称为倒逗号之间应包含完整的表达。

二、算术运算符

算术运算符有以下 Bourne Shell 支持。

假设变量 a=10 ,变量 b=20
在这里插入图片描述
这是非常重要的,这里要注意,所有的条件式将放在方括号内,他们身边有一个空格,例如 [ $a == $b ] 是正确的,为 [$a==$b] 是不正确的。

所有的算术计算,使用长整数。

🌰举个例子:

#!/bin/sha=10
b=20
val=`expr $a + $b`
echo "a + b : $val"val=`expr $a - $b`
echo "a - b : $val"val=`expr $a * $b`
echo "a * b : $val"val=`expr $b / $a`
echo "b / a : $val"val=`expr $b % $a`
echo "b % a : $val"if [ $a == $b ]
thenecho "a is equal to b"
fiif [ $a != $b ]
thenecho "a is not equal to b"
fi

这将产生以下结果:

a + b : 30
a - b : -10
a * b : 200
b / a : 2
b % a : 0
a is not equal to b

🎯记下有以下几点:

  • 运算符和表达式之间必须有空格,2+2 是不正确的,它应该写成 2 + 2
  • ``,称为倒逗号之间应包含完整的表达。
  • 应该用 * 符号的乘法。
  • if...then...fi 语句是下一章节中已经解释的决策声明。

三、关系运算符

Bourne Shell 的支持,关系运算符的具体数值。这些运算符不能使用字符串值,除非它们的值是数字。

🌰例如,运算符将努力检查10和20之间的关系,以及在“10”和“20”,但不是“10”和“21”之间。

假设变量a=10,变量b=20:

在这里插入图片描述

🎯这里要注意,所有的条件式将放在方括号内,他们周围有一个空格,这是非常重要的,例如 [ $a <= $b ] 是正确的, [$a <= $b] 是不正确的。

🌰举个例子:

#!/bin/sha=10
b=20if [ $a -eq $b ]
thenecho "$a -eq $b : a is equal to b"
elseecho "$a -eq $b: a is not equal to b"
fiif [ $a -ne $b ]
thenecho "$a -ne $b: a is not equal to b"
elseecho "$a -ne $b : a is equal to b"
fiif [ $a -gt $b ]
thenecho "$a -gt $b: a is greater than b"
elseecho "$a -gt $b: a is not greater than b"
fiif [ $a -lt $b ]
thenecho "$a -lt $b: a is less than b"
elseecho "$a -lt $b: a is not less than b"
fiif [ $a -ge $b ]
thenecho "$a -ge $b: a is greater or  equal to b"
elseecho "$a -ge $b: a is not greater or equal to b"
fiif [ $a -le $b ]
thenecho "$a -le $b: a is less or  equal to b"
elseecho "$a -le $b: a is not less or equal to b"
fi

这将产生以下结果:

10 -eq 20: a is not equal to b
10 -ne 20: a is not equal to b
10 -gt 20: a is not greater than b
10 -lt 20: a is less than b
10 -ge 20: a is not greater or equal to b
10 -le 20: a is less or  equal to b

🎯注意:记下有以下几点:

  • 运算符和表达式之间必须有空格,例如2+2是不正确的,它应该写成2 + 2。

  • if…then…else…fi 语句是下一章节中要解释的决策声明。

四、布尔运算

布尔运算符 有以下 Bourne Shell 的支持。

假设变量一个变量b=10,然后变量b=20:
在这里插入图片描述
🌰举个例子:

#!/bin/sha=10
b=20if [ $a != $b ]
thenecho "$a != $b : a is not equal to b"
elseecho "$a != $b: a is equal to b"
fiif [ $a -lt 100 -a $b -gt 15 ]
thenecho "$a -lt 100 -a $b -gt 15 : returns true"
elseecho "$a -lt 100 -a $b -gt 15 : returns false"
fiif [ $a -lt 100 -o $b -gt 100 ]
thenecho "$a -lt 100 -o $b -gt 100 : returns true"
elseecho "$a -lt 100 -o $b -gt 100 : returns false"
fiif [ $a -lt 5 -o $b -gt 100 ]
thenecho "$a -lt 100 -o $b -gt 100 : returns true"
elseecho "$a -lt 100 -o $b -gt 100 : returns false"
fi

🎯注意:记下有以下几点:

  • 运算符和表达式之间必须有空格,例如2+2是不正确的,它应该写成2 + 2。

  • if…then…else…fi 语句是下一章节中要解释的决策声明。

五、字符串运算符

有下列字符串运算由 Bourne Shell 支持。

假设变量a=“abc”和变量b=“efg”:

在这里插入图片描述
🌰举个例子:

#!/bin/sha="abc"
b="efg"if [ $a = $b ]
thenecho "$a = $b : a is equal to b"
elseecho "$a = $b: a is not equal to b"
fiif [ $a != $b ]
thenecho "$a != $b : a is not equal to b"
elseecho "$a != $b: a is equal to b"
fiif [ -z $a ]
thenecho "-z $a : string length is zero"
elseecho "-z $a : string length is not zero"
fiif [ -n $a ]
thenecho "-n $a : string length is not zero"
elseecho "-n $a : string length is zero"
fiif [ $a ]
thenecho "$a : string is not empty"
elseecho "$a : string is empty"
fi

这将产生以下输出结果:

abc = efg: a is not equal to b
abc != efg : a is not equal to b
-z abc : string length is not zero
-n abc : string length is not zero
abc : string is not empty

🎯注意:记下有以下几点:

  • 运算符和表达式之间必须有空格,例如2+2是不正确的,它应该写成2 + 2。

  • if…then…else…fi 语句是下一章节中要解释的决策声明。

六、文件测试操作

有以下是操作测试 Unix 文件相关联的各种属性。

假设一个的变量文件保存现有文件名 “test” ,其大小为 100字节 ,有读,写和执行权限:

在这里插入图片描述
下面是一个例子,它使用的所有文件测试操作:

假设一个变量的文件保存现有文件名 "/var/www/yiibai/unix/test.sh",其大小为100字节,读,写和执行权限:

#!/bin/shfile="/var/www/yiibai/unix/test.sh"if [ -r $file ]
thenecho "File has read access"
elseecho "File does not have read access"
fiif [ -w $file ]
thenecho "File has write permission"
elseecho "File does not have write permission"
fiif [ -x $file ]
thenecho "File has execute permission"
elseecho "File does not have execute permission"
fiif [ -f $file ]
thenecho "File is an ordinary file"
elseecho "This is sepcial file"
fiif [ -d $file ]
thenecho "File is a directory"
elseecho "This is not a directory"
fiif [ -s $file ]
thenecho "File size is zero"
elseecho "File size is not zero"
fiif [ -e $file ]
thenecho "File exists"
elseecho "File does not exist"
fi

这将产生以下输出结果:

File has read access
File has write permission
File has execute permission
File is an ordinary file
This is not a directory
File size is zero
File exists

🎯注意:记下有以下几点:

  • 运算符和表达式之间必须有空格,例如2+2是不正确的,它应该写成2 + 2。

  • if…then…else…fi 语句是下一章节中要解释的决策声明。

Shell__363">七、C Shell 操作符

本教程列出了所有 C Shell 的运算符。在这里,大部分的运算符都是跟 C 语言编程很相似。

运算符优先级递减 的顺序如下:

7.1 算术和逻辑运算符

在这里插入图片描述

7.2 文件测试操作

有以下操作测试与 Unix 文件相关联的各种属性。
在这里插入图片描述

Shell__373">八、Korn Shell 运算符

本教程列出了所有 Korn Shell 中的运算符。在这里,大部分的运算符都是我们熟知的 C 语言编程很相似。

运算符优先级递减 的顺序如下列出:

8.1 算术和逻辑运算符

在这里插入图片描述

8.2 文件测试操作

有以下运算符测试可用在 Unix 文件中的相关联各种属性。
在这里插入图片描述

九、总结

Shell 语法的基本运算符其实和其它语言有很多相似之处,只要记住该语法的特别之处即可。如果对您有帮助,请点赞、收藏、评论吧💞


在这里插入图片描述


http://www.ppmy.cn/server/164980.html

相关文章

Github 2025-02-01 开源项目月报 Top20

根据Github Trendings的统计,本月(2025-02-01统计)共有20个项目上榜。根据开发语言中项目的数量,汇总情况如下: 开发语言项目数量Python项目8TypeScript项目3Jupyter Notebook项目2Rust项目2HTML项目2C++项目1Ruby项目1JavaScript项目1Svelte项目1非开发语言项目1Go项目1Oll…

【Linux系统】计算机世界的基石:冯诺依曼架构与操作系统设计

文章目录 一.冯诺依曼体系结构1.1 为什么体系结构中要存在内存&#xff1f;1.2 冯诺依曼瓶颈 二.操作系统2.1 设计目的2.2 系统调用与库函数 一.冯诺依曼体系结构 冯诺依曼体系结构&#xff08;Von Neumann Architecture&#xff09;是计算机的基本设计理念之一&#xff0c;由…

6 [新一代Github投毒针对网络安全人员钓鱼]

0x01 前言 在Github上APT组织“海莲花”发布存在后门的提权BOF&#xff0c;通过该项目针对网络安全从业人员进行钓鱼。不过其实早在几年前就已经有人对Visual Studio项目恶意利用进行过研究&#xff0c;所以投毒的手法也不算是新的技术。但这次国内有大量的安全从业者转发该钓…

【工欲善其事】利用 DeepSeek 实现复杂 Git 操作:从原项目剥离出子版本树并同步到新的代码库中

文章目录 利用 DeepSeek 实现复杂 Git 操作1 背景介绍2 需求描述3 思路分析4 实现过程4.1 第一次需求确认4.2 第二次需求确认4.3 第三次需求确认4.4 V3 模型&#xff1a;中间结果的处理4.5 方案验证&#xff0c;首战告捷 5 总结复盘 利用 DeepSeek 实现复杂 Git 操作 1 背景介绍…

深度学习 Pytorch 基础网络手动搭建与快速实现

为了方便后续练习的展开&#xff0c;我们尝试自己创建一个数据生成器&#xff0c;用于自主生成一些符合某些条件、具备某些特性的数据集。 导入相关的包 # 随机模块 import random# 绘图模块 import matplotlib as mpl import matplotlib.pyplot as plt# 导入numpy import nu…

时序论文39 | 频域MLP在时间序列预测中更为有效

论文标题&#xff1a;Frequency-domain MLPs are More Effective Learners in Time Series Forecasting 论文链接&#xff1a;https://arxiv.org/abs/2311.06184 代码链接&#xff1a;https://github.com/aikunyi/FreTS &#xff08;后台回复“交流”加入讨论群&#xff0c;…

【腾讯前端面试】纯css画图形

之前参加腾讯面试&#xff0c;第一轮是笔试&#xff0c;面试官发的试卷里有一题手写css画一个扇形、一个平行四边形……笔试时间还是比较充裕的&#xff0c;但是我对这题完全没有思路&#x1f62d;于是就空着了&#xff0c;最后也没过。 今天偶然翻到廖雪峰大佬的博客里提到了关…

一文了解硅基流动(SiliconCloud):有前景的大模型云服务平台

&#x1f349; CSDN 叶庭云&#xff1a;https://yetingyun.blog.csdn.net/ 一、硅基流动究竟是什么&#xff1f; 硅基流动&#xff08;SiliconCloud&#xff09;是硅基流动公司推出的一站式大模型云服务平台&#xff0c;致力于为开发者和企业提供高效、低成本且全面的生成式人工…