bash之基本运算符

一.算术运算符

vim test.sh

bash 复制代码
#!/bin/bash

a=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 ]
then
   echo "a == b"
fi
if [ $a != $b ]
then
   echo "a != b"
fi

运行:

bash 复制代码
bash test.sh

a + b : 30
a - b : -10
a * b : 200
b / a : 2
b % a : 0
a != b

原生 bash 不支持简单的数学运算,但是可以通过其他命令来实现,例如 awk 和 expr,expr 最常用。

expr 是一款表达式计算工具,使用它能完成表达式的求值操作。

注意使用的反引号(esc 键下边)

表达式和运算符之间要有空格 a + b 写成 a+b 不行

条件表达式要放在方括号之间,并且要有空格 [ a == b ] 写成 [a==b] 不行

乘号(*)前边必须加反斜杠(\)才能实现乘法运算

二.关系运算符

  1. -eq
    • 含义:等于(Equal)
    • 示例:if [ $a -eq $b ]; then echo "a等于b"; fi,当$a的值等于$b的值时,条件为真,执行echo语句。
  2. -ne
    • 含义:不等于(Not Equal)
    • 示例:if [ $a -ne $b ]; then echo "a不等于b"; fi,当$a的值不等于$b的值时,条件为真。
  3. -lt
    • 含义:小于(Less Than)
    • 示例:if [ $a -lt $b ]; then echo "a小于b"; fi,当$a的值小于$b的值时,条件为真。
  4. -le
    • 含义:小于等于(Less Than or Equal)
    • 示例:if [ $a -le $b ]; then echo "a小于等于b"; fi,当$a的值小于或等于$b的值时,条件为真。
  5. -gt
    • 含义:大于(Greater Than)
    • 示例:if [ $a -gt $b ]; then echo "a大于b"; fi,当$a的值大于$b的值时,条件为真。
  6. -ge
    • 含义:大于等于(Greater Than or Equal)
    • 示例:if [ $a -ge $b ]; then echo "a大于等于b"; fi,当$a的值大于或等于$b的值时,条件为真。
      vim test2.sh
bash 复制代码
#!/bin/bash

a=10
b=20

if [ $a -eq $b ]
then
   echo "$a -eq $b : a == b"
else
   echo "$a -eq $b: a != b"
fi
bash 复制代码
bash test2.sh

10 -eq 20: a != b

三.逻辑运算符

  1. "&&"(与运算符)

功能:当使用 "&&" 连接两个命令或条件表达式时,只有当左边的命令或条件为真时,才会执行右边的命令或检查右边的条件。如果左边为假,则右边的操作不会执行,整个表达式的值为假。

示例:

command1 && command2:先执行command1,如果command1执行成功(返回值为 0,在 Bash 中表示真),则接着执行command2;如果command1失败(返回非 0 值),则command2不会执行。

$a -gt 10 \] \&\& \[ $b -lt 20 \]:当变量$a的值大于 10 并且变量$b的值小于 20 时,整个表达式为真。 2. "\|\|"(或运算符) 功能:当使用 "\|\|" 连接两个命令或条件表达式时,如果左边的命令或条件为假,则会执行右边的命令或检查右边的条件。只要左边或右边其中一个为真,整个表达式的值就为真。 示例: command1 \|\| command2:先执行command1,如果command1失败(返回非 0 值),则接着执行command2;如果command1成功(返回值为 0),则command2不会执行。 \[ $a -eq 5 \] \|\| \[ $a -eq 10 \]:当变量$a的值等于 5 或者等于 10 时,整个表达式为真。 ## 四.字符串运算符 = 检测两个字符串是否相等,相等就返回true != 检测两个字符串是否相等,不相等就返回true -z 检测两个字符串长度是否为0,为0就返回true -n 检测两个字符串长度是否为0,不为0就返回true str 检测字符串是否为空,不为空返回true ```bash #!/bin/bash a="abc" b="efg" if [ $a = $b ] then echo "$a = $b : a == b" else echo "$a = $b: a != b" fi if [ -n $a ] then echo "-n $a : The string length is not 0" else echo "-n $a : The string length is 0" fi if [ $a ] then echo "$a : The string is not empty" else echo "$a : The string is empty" fi ``` 结果: ```bash abc = efg: a != b -n abc : The string length is not 0 abc : The string is not empty ``` ## 五.文件测试运算符 ![](https://i-blog.csdnimg.cn/direct/05ea361baf3f4b96b0194b049edf6e61.png) ```bash #!/bin/bash file="/home/shiyanlou/test.sh" if [ -r $file ] then echo "The file is readable" else echo "The file is not readable" fi if [ -e $file ] then echo "File exists" else echo "File not exists" fi ``` 结果: ```bash The file is readable File exists ```

相关推荐
小杜的生信筆記几秒前
基于R语言绘制网络图,新人选手上手
开发语言·r语言·生物信息学·组学
小码哥0684 分钟前
家政服务管理-家政服务管理平台-家政服务管理平台源码-家政服务管理平台java代码-基于springboot的家政服务管理平台
java·开发语言·spring boot·家政服务·家政服务平台·家政服务系统·家政服务管理平台源码
爪洼守门员5 分钟前
前端性能优化
开发语言·前端·javascript·笔记·性能优化
Array*13 分钟前
java实现word中插入附件(支持所有文件格式)
java·开发语言·word·poi·ole
Donald_brian19 分钟前
线程同步
java·开发语言·jvm
全栈陈序员23 分钟前
【Python】基础语法入门(十五)——标准库精选:提升效率的内置工具箱
开发语言·人工智能·python·学习
郑州光合科技余经理34 分钟前
技术视角:海外版一站式同城生活服务平台源码解析
java·开发语言·uni-app·php·排序算法·objective-c·生活
郑州光合科技余经理36 分钟前
海外版生活服务系统源码 | 外卖+跑腿一站式平台技术解析
java·开发语言·javascript·git·spring cloud·php·生活
小小Fred36 分钟前
Cortex-M3 LR寄存器的特殊值EXC_RETURN
java·开发语言·jvm
小小心愿家37 分钟前
线程——对于锁的进一步认识
java·开发语言