shell script—运算符

news/2024/11/23 23:23:24/

本文主要介绍shell script中的算数运算符、比较运算符、逻辑运算符、赋值运算符、位运算符和条件运算符

1.算数运算符

在shell脚本中,可以使用一下算术运算符:

运算符描述
+加法
-减法
*乘法
/除法
%取余数
++自增
- -自减

示例

#!/bin/basha=20
b=10
c=$((a+b))
echo $c  # 输出 30d=$((a-b))
echo $de=$((a*b))
echo $ef=$((a/b))
echo $fa=13
g=$((a%b))
echo $g

输出


30
10
200
2
3

除此之外,还可以用let命令或者是(( ))这样的双括号来进行算术运算,例如:

#!/bin/basha=5
b=10
let c=a+b
echo $c  # 输出 15let d=a*b
echo $d  # 输出 50(( a++ ))
echo $a  # 输出 6(( --a ))
echo $a  # 输出 5(( b-- ))
echo $b  # 输出 9(( ++b ))
echo $b  # 输出 10

2.比较运算符

在shell脚本中,可以使用以下比较运算符(整数类型):

运算符描述说明
-eq是否等于equal
-ne是否不等于not equal
-gt是否大于greater than
-ge是否大于等于greater than or equal to
-lt是否小于less than
-le是否小于等于less than or equal to

示例

#!/bin/basha=10
b=20
if [ $a -eq $b ]
thenecho 'a equals b'
elseecho 'a not equals b'
fia=5
b=10
if [ $a -lt $b ]
thenecho 'a is less than b'
elseecho 'a is not less than b'
fistr1='hello'
str2='world'
if [ $str1 == $str2 ]
thenecho 'Strings are equal.'
elseecho 'Strings are not equal.'
fi

输出

a not equals b
a is less than b
Strings are not equal.

从上面的示例可以看出字符串有单独的比较运算

运算符描述
= / ==字符串是否相等
!=字符串是否不相等
-z字符串长度是否为0
-n字符串长度是否不为0
str1 < str2比较两个字符串的字典顺序
str1 > str2比较两个字符串的字典顺序

示例

#!/bin/bashstr1="hello"
str2="world"
if [ $str1 = $str2 ]
thenecho "str1 equals str2"
elseecho "str1 is not equal to str2"
fiif [ $str1 == $str2 ]
thenecho "str1 equals str2"
elseecho "str1 is not equal to str2"
fiif [ $str1 > $str2 ]
thenecho "str1 great than to str2"
elseecho "str1 less than or equal to str2"
fistr=""
if [ -z $str ]
thenecho "The string is empty."
elseecho "The string is not empty."
fistr="hello"
if [ -n $str ]
thenecho "The string is not empty."
elseecho "The string is empty."
fi

输出

str1 is not equal to str2
str1 is not equal to str2
str1 great than to str2
The string is empty.
The string is not empty.

3.逻辑运算符

在Shell中,有三种逻辑运算符,分别是“&&”、“||”和“!”。

&&逻辑运算符

“&&”逻辑运算符表示“与”,用于连接两个条件语句,形成一个新的条件语句。当且仅当两个条件语句都为真时,该新条件语句才为真。

示例

if [ -f /etc/passwd ] && [ -r /etc/passwd ]
thenecho "The file /etc/passwd exists and is readable."
elseecho "The file /etc/passwd does not exist or is not readable."
fi

示例

a=1
b=2
c=3if [ $a -eq $c ]&& [ $b -eq $c ]
thenecho "ok"
else echo "not ok"
fi

在上面的例子中,我们使用“&&”逻辑运算符连接了两个条件语句,分别判断 /etc/passwd 文件是否存在和是否可读。只有当两个条件语句都为真时,才会输出“The file /etc/passwd exists and is readable.”。

||逻辑运算符

“||”逻辑运算符表示“或”,用于连接两个条件语句,形成一个新的条件语句。当两个条件语句中有至少一个为真时,该新条件语句就为真。

示例

if [ -f /etc/passwd ] || [ -f /etc/shadow ]
thenecho "The file /etc/passwd or /etc/shadow exists."
elseecho "The file /etc/passwd and /etc/shadow do not exist."
fi

在上面的例子中,我们使用“||”逻辑运算符连接了两个条件语句,分别判断 /etc/passwd 文件和 /etc/shadow 文件是否存在。只有当两个条件语句中至少有一个为真时,才会输出“The file /etc/passwd or /etc/shadow exists.”。

!逻辑运算符

“!”逻辑运算符表示“非”,用于将一个条件语句的结果取反。例如:

示例

if [ ! -f /etc/passwd ]
thenecho "The file /etc/passwd does not exist."
elseecho "The file /etc/passwd exists."
fi
#!/bin/basha=1
b=2
c=3if [ ! $a -eq $c ] || [ $b -eq $c ]
thenecho "ok"
else echo "not ok"
fi#输出ok

在上面的例子中,我们使用“-f”检查 /etc/passwd 文件是否存在,并且使用“!”逻辑运算符将其结果取反。如果文件不存在,则输出“The file /etc/passwd does not exist.”。

4.赋值运算符

在Shell中,有多种赋值运算符,主要包括“=、+=、-=、*=、/=、%=、<<=、>>=、&=、^=、|=”。下面逐一介绍这些运算符的用法:

= 赋值运算符

“= ”赋值运算符用于将右边的值赋值给左边的变量。例如:

msg="Hello World"
echo $msg

上面的代码将字符串 “Hello World” 赋值给变量 msg,并将其打印出来。

+= 赋值运算符

“+=”赋值运算符用于将右边的值追加到左边变量的值的末尾。例如:

msg="Hello "
msg+="World"
echo $msg

上面的代码将字符串 "Hello " 赋值给变量 msg,然后使用“+=”将字符串 “World” 追加到 msg 变量的末尾,最终输出 “Hello World”。

-=、*=、/=、%= 赋值运算符

“-=、*=、/=、%=”赋值运算符分别表示减、乘、除和求余的赋值运算符,用于将右边的值与左边的变量的值进行对应的运算,然后将结果赋值给左边的变量。例如:

a=10
a-=5
echo $a  # 输出5b=5
b*=3
echo $b  # 输出15c=100
c/=10
echo $c  # 输出10d=20
d%=3
echo $d  # 输出2

<<=、>>=、&=、^=、|= 赋值运算符

“<<=、>>=、&=、^=、|=”赋值运算符表示按位左移、按位右移、按位与、按位异或和按位或的赋值运算符,用于将右边的值与左边变量的值进行相应的位运算,然后将结果赋值给左边的变量。例如:

a=100      # 二进制为 01100100
a<<=2      # 相当于 a=a<<2,即二进制为 10010000,十进制为 144
echo $a   # 输出144b=100      # 二进制为 01100100
b>>=2      # 相当于 b=b>>2,即二进制为 00011001,十进制为 25
echo $b   # 输出25c=0b1011   # 二进制为 1011,十进制为 11
c&=0b1110  # 二进制为 1010,十进制为 10
echo $c   # 输出10d=0b1011   # 二进制为 1011,十进制为 11
d^=0b1100  # 二进制为 0111,十进制为 7
echo $d   # 输出7e=0b1011   # 二进制为 1011,十进制为 11
e|=0b1100  # 二进制为 1111,十进制为 15
echo $e   # 输出15

5.位运算符

在Shell中,有多种位运算符,可以用于在二进制位上执行位运算。主要包括“&、|、^、~、<<、>>”。

& 位运算符

“&”位运算符表示按位与运算符,用于将两个数的每个二进制位进行“与”运算,例如:

a=0b1010
b=0b0110
c=$((a & b))   # c的值为0b0010,即十进制的 2
echo $c

| 位运算符

“|”位运算符表示按位或运算符,用于将两个数的每个二进制位进行“或”运算,例如:

a=0b1010
b=0b0110
c=$((a | b))   # c的值为0b1110,即十进制的 14
echo $c

^ 位运算符

“^”位运算符表示按位异或运算符,用于将两个数的每个二进制位进行“异或”运算,例如:

a=0b1010
b=0b0110
c=$((a ^ b))   # c的值为0b1100,即十进制的 12
echo $c

~ 位运算符

“~ ”位运算符表示按位取反运算符,用于将一个数的每个二进制位进行“非”运算,例如:

a=0b1010
b=$((~a))   # b的值为0b0101,即十进制的 -11
echo $b

<< 位运算符

“<<”位运算符表示按位左移运算符,用于将一个数的各二进制位全部左移若干位,例如:

a=10    # 二进制为 1010
b=$((a << 2))    # b的值为0b101000,即十进制的 40
echo $b

>> 位运算符

“>>”位运算符表示按位右移运算符,用于将一个数的各二进制位全部右移若干位。例如:

a=10    # 二进制为 1010
b=$((a >> 2))    # b的值为0b10,即十进制的 2
echo $b

6.条件运算符

“trinary operator”条件运算符用于在一行代码中执行条件判断,其基本语法如下:

condition ? value1 : value2

在上面的语法中,condition是一个条件语句,当condition为真时,该条件运算符返回value1,否则返回value2。例如:

a=10
b=5
max=$((a > b ? a : b))
echo $max

在上面的代码中,我们使用条件运算符判断 a 是否大于 b,如果是,则将 a 的值赋。


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

相关文章

一篇文章告诉你标准化和归一化的区别?

一篇文章告诉你标准化和归一化的区别&#xff1f; 2019-02-28 17:12:39 融融网融融网阅读量&#xff1a;484 进一步推进企业的标准化工作&#xff0c;使之发展水平适应经济全球化下市场竞争的要求&#xff0c;促进企业综合实力的提升是标准化建设的目标。很多人认为标准化理解为…

k8s核心组件详细介绍教程(配超详细实例演示)

本文实验环境基于上篇文章手把手从零开始搭建k8s集群超详细教程本文根据B站课程云原生Java架构师的第一课K8sDockerKubeSphereDevOps学习总结而来 k8s核心组件介绍1. Namespace2. Pod1. pod相关命令2. 实例——创建一个包含redis容器的pod3. Deployments1. 多副本2. 扩缩容3. 自…

非参数估计:核密度估计KDE

非参数估计&#xff1a;核密度估计KDE 非参数估计&#xff1a;核密度估计KDE from&#xff1a;http://blog.csdn.net/pipisorry/article/details/53635895核密度估计Kernel Density Estimation(KDE)概述 密度估计的问题 由给定样本集合求解随机变量的分布密度函数问题是概率统…

LeetCode简单题之找出数组中的所有 K 近邻下标

题目 给你一个下标从 0 开始的整数数组 nums 和两个整数 key 和 k 。K 近邻下标 是 nums 中的一个下标 i &#xff0c;并满足至少存在一个下标 j 使得 |i - j| < k 且 nums[j] key 。 以列表形式返回按 递增顺序 排序的所有 K 近邻下标。 示例 1&#xff1a; 输入&#xf…

回归算法 - 线性回归求解 θ(最大似然估计求解)

回顾线性回归的公式&#xff1a;θ是系数&#xff0c;X是特征&#xff0c;h(x) 是预测值。 h(x) θ0 θ1x1 θ2x2 … θnxn h(x) Σ θixi&#xff08; i0~n &#xff09; h(x) θTX [θ1,θ2,θ3,…,θn] * [x1,x2,x3,…,xn]T 最终要求是计算出θ的值&#xff0c;并选…

LeetCode简单题之将数组划分成相等数对

题目 给你一个整数数组 nums &#xff0c;它包含 2 * n 个整数。 你需要将 nums 划分成 n 个数对&#xff0c;满足&#xff1a; 每个元素 只属于一个 数对。 同一数对中的元素 相等 。 如果可以将 nums 划分成 n 个数对&#xff0c;请你返回 true &#xff0c;否则返回 false …

硬核科普:到底啥是云原生?

本文主要根据课程 什么是云原生&#xff1f;_哔哩哔哩_bilibili 总结而来&#xff0c;其他参考文章如下&#xff1a; 《云原生人才计划之Kubernetes 技术图谱》发布&#xff01; - 知乎 (zhihu.com)kubernetes-阿里云与CNCF联合推出的云原生技术公开课_哔哩哔哩_bilibili什么是…

LeetCode简单题之统计包含给定前缀的字符串

题目 给你一个字符串数组 words 和一个字符串 pref 。 返回 words 中以 pref 作为 前缀 的字符串的数目。 字符串 s 的 前缀 就是 s 的任一前导连续字符串。 示例 1&#xff1a; 输入&#xff1a;words [“pay”,“attention”,“practice”,“attend”], pref “at” 输出&…