Bash 支持很多运算符,包括算数运算符、关系运算符、布尔运算符、字符串运算符和文件测试运算符。

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

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

例如,两个数相加:

  1. #!/bin/bash
  2. val=`expr 2 + 2`
  3. echo "Total value : $val"

运行脚本输出:

Total value : 4

两点注意:

  • 表达式和运算符之间要有空格,例如 2+2 是不对的,必须写成 2 + 2,这与我们熟悉的大多数编程语言不一样。
  • 完整的表达式要被 ` ` 包含,注意这个字符不是常用的单引号,在 Esc 键下边。

算术运算符

先来看一个使用算术运算符的例子:

  1. #!/bin/sh
  2. a=10
  3. b=20
  4. val=`expr $a + $b`
  5. echo "a + b : $val"
  6. val=`expr $a - $b`
  7. echo "a - b : $val"
  8. val=`expr $a \* $b`
  9. echo "a * b : $val"
  10. val=`expr $b / $a`
  11. echo "b / a : $val"
  12. val=`expr $b % $a`
  13. echo "b % a : $val"
  14. if [ $a == $b ]
  15. then
  16. echo "a is equal to b"
  17. fi
  18. if [ $a != $b ]
  19. then
  20. echo "a is not equal to b"
  21. fi

运行结果:

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

注意:

  • 乘号(*)前边必须加反斜杠(\)才能实现乘法运算;
  • if...then...fi 是条件语句,后续将会讲解。
算术运算符列表
运算符 说明 举例
+ 加法 `expr $a + $b` 结果为 30。
- 减法 `expr $a - $b` 结果为 10。
* 乘法 `expr $a \* $b` 结果为  200。
/ 除法 `expr $b / $a` 结果为 2。
% 取余 `expr $b % $a` 结果为 0。
= 赋值 a=$b 将把变量 b 的值赋给 a。
== 相等。用于比较两个数字,相同则返回 true。 [ $a == $b ] 返回 false。
!= 不相等。用于比较两个数字,不相同则返回 true。 [ $a != $b ] 返回 true。

注意:条件表达式要放在方括号之间,并且要有空格,例如 [$a==$b] 是错误的,必须写成 [ $a == $b ]。

关系运算符

关系运算符只支持数字,不支持字符串,除非字符串的值是数字。

先来看一个关系运算符的例子:

  1. #!/bin/sh
  2. a=10
  3. b=20
  4. if [ $a -eq $b ]
  5. then
  6. echo "$a -eq $b : a is equal to b"
  7. else
  8. echo "$a -eq $b: a is not equal to b"
  9. fi
  10. if [ $a -ne $b ]
  11. then
  12. echo "$a -ne $b: a is not equal to b"
  13. else
  14. echo "$a -ne $b : a is equal to b"
  15. fi
  16. if [ $a -gt $b ]
  17. then
  18. echo "$a -gt $b: a is greater than b"
  19. else
  20. echo "$a -gt $b: a is not greater than b"
  21. fi
  22. if [ $a -lt $b ]
  23. then
  24. echo "$a -lt $b: a is less than b"
  25. else
  26. echo "$a -lt $b: a is not less than b"
  27. fi
  28. if [ $a -ge $b ]
  29. then
  30. echo "$a -ge $b: a is greater or equal to b"
  31. else
  32. echo "$a -ge $b: a is not greater or equal to b"
  33. fi
  34. if [ $a -le $b ]
  35. then
  36. echo "$a -le $b: a is less or equal to b"
  37. else
  38. echo "$a -le $b: a is not less or equal to b"
  39. 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
关系运算符列表
运算符 说明 举例
-eq 检测两个数是否相等,相等返回 true。 [ $a -eq $b ] 返回 true。
-ne 检测两个数是否相等,不相等返回 true。 [ $a -ne $b ] 返回 true。
-gt 检测左边的数是否大于右边的,如果是,则返回 true。 [ $a -gt $b ] 返回 false。
-lt 检测左边的数是否小于右边的,如果是,则返回 true。 [ $a -lt $b ] 返回 true。
-ge 检测左边的数是否大等于右边的,如果是,则返回 true。 [ $a -ge $b ] 返回 false。
-le 检测左边的数是否小于等于右边的,如果是,则返回 true。 [ $a -le $b ] 返回 true。

布尔运算符

先来看一个布尔运算符的例子:

  1. #!/bin/sh
  2. a=10
  3. b=20
  4. if [ $a != $b ]
  5. then
  6. echo "$a != $b : a is not equal to b"
  7. else
  8. echo "$a != $b: a is equal to b"
  9. fi
  10. if [ $a -lt 100 -a $b -gt 15 ]
  11. then
  12. echo "$a -lt 100 -a $b -gt 15 : returns true"
  13. else
  14. echo "$a -lt 100 -a $b -gt 15 : returns false"
  15. fi
  16. if [ $a -lt 100 -o $b -gt 100 ]
  17. then
  18. echo "$a -lt 100 -o $b -gt 100 : returns true"
  19. else
  20. echo "$a -lt 100 -o $b -gt 100 : returns false"
  21. fi
  22. if [ $a -lt 5 -o $b -gt 100 ]
  23. then
  24. echo "$a -lt 100 -o $b -gt 100 : returns true"
  25. else
  26. echo "$a -lt 100 -o $b -gt 100 : returns false"
  27. fi

运行结果:

10 != 20 : a is not equal to b
10 -lt 100 -a 20 -gt 15 : returns true
10 -lt 100 -o 20 -gt 100 : returns true
10 -lt 5 -o 20 -gt 100 : returns false
布尔运算符列表
运算符 说明 举例
! 非运算,表达式为 true 则返回 false,否则返回 true。 [ ! false ] 返回 true。
-o 或运算,有一个表达式为 true 则返回 true。 [ $a -lt 20 -o $b -gt 100 ] 返回 true。
-a 与运算,两个表达式都为 true 才返回 true。 [ $a -lt 20 -a $b -gt 100 ] 返回 false。

字符串运算符

先来看一个例子:

  1. #!/bin/sh
  2. a="abc"
  3. b="efg"
  4. if [ $a = $b ]
  5. then
  6. echo "$a = $b : a is equal to b"
  7. else
  8. echo "$a = $b: a is not equal to b"
  9. fi
  10. if [ $a != $b ]
  11. then
  12. echo "$a != $b : a is not equal to b"
  13. else
  14. echo "$a != $b: a is equal to b"
  15. fi
  16. if [ -z $a ]
  17. then
  18. echo "-z $a : string length is zero"
  19. else
  20. echo "-z $a : string length is not zero"
  21. fi
  22. if [ -n $a ]
  23. then
  24. echo "-n $a : string length is not zero"
  25. else
  26. echo "-n $a : string length is zero"
  27. fi
  28. if [ $a ]
  29. then
  30. echo "$a : string is not empty"
  31. else
  32. echo "$a : string is empty"
  33. 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
字符串运算符列表
运算符 说明 举例
= 检测两个字符串是否相等,相等返回 true。 [ $a = $b ] 返回 false。
!= 检测两个字符串是否相等,不相等返回 true。 [ $a != $b ] 返回 true。
-z 检测字符串长度是否为0,为0返回 true。 [ -z $a ] 返回 false。
-n 检测字符串长度是否为0,不为0返回 true。 [ -z $a ] 返回 true。
str 检测字符串是否为空,不为空返回 true。 [ $a ] 返回 true。

文件测试运算符

文件测试运算符用于检测 Unix 文件的各种属性。

例如,变量 file 表示文件“/var/www/tutorialspoint/unix/test.sh”,它的大小为100字节,具有 rwx 权限。下面的代码,将检测该文件的各种属性:

  1. #!/bin/sh
  2. file="/var/www/tutorialspoint/unix/test.sh"
  3. if [ -r $file ]
  4. then
  5. echo "File has read access"
  6. else
  7. echo "File does not have read access"
  8. fi
  9. if [ -w $file ]
  10. then
  11. echo "File has write permission"
  12. else
  13. echo "File does not have write permission"
  14. fi
  15. if [ -x $file ]
  16. then
  17. echo "File has execute permission"
  18. else
  19. echo "File does not have execute permission"
  20. fi
  21. if [ -f $file ]
  22. then
  23. echo "File is an ordinary file"
  24. else
  25. echo "This is sepcial file"
  26. fi
  27. if [ -d $file ]
  28. then
  29. echo "File is a directory"
  30. else
  31. echo "This is not a directory"
  32. fi
  33. if [ -s $file ]
  34. then
  35. echo "File size is zero"
  36. else
  37. echo "File size is not zero"
  38. fi
  39. if [ -e $file ]
  40. then
  41. echo "File exists"
  42. else
  43. echo "File does not exist"
  44. 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
文件测试运算符列表
操作符 说明 举例
-b file 检测文件是否是块设备文件,如果是,则返回 true。 [ -b $file ] 返回 false。
-c file 检测文件是否是字符设备文件,如果是,则返回 true。 [ -b $file ] 返回 false。
-d file 检测文件是否是目录,如果是,则返回 true。 [ -d $file ] 返回 false。
-f file 检测文件是否是普通文件(既不是目录,也不是设备文件),如果是,则返回 true。 [ -f $file ] 返回 true。
-g file 检测文件是否设置了 SGID 位,如果是,则返回 true。 [ -g $file ] 返回 false。
-k file 检测文件是否设置了粘着位(Sticky Bit),如果是,则返回 true。 [ -k $file ] 返回 false。
-p file 检测文件是否是具名管道,如果是,则返回 true。 [ -p $file ] 返回 false。
-u file 检测文件是否设置了 SUID 位,如果是,则返回 true。 [ -u $file ] 返回 false。
-r file 检测文件是否可读,如果是,则返回 true。 [ -r $file ] 返回 true。
-w file 检测文件是否可写,如果是,则返回 true。 [ -w $file ] 返回 true。
-x file 检测文件是否可执行,如果是,则返回 true。 [ -x $file ] 返回 true。
-s file 检测文件是否为空(文件大小是否大于0),不为空返回 true。 [ -s $file ] 返回 true。
-e file 检测文件(包括目录)是否存在,如果是,则返回 true。 [ -e $file ] 返回 true。

Shell运算符:Shell算数运算符、关系运算符、布尔运算符、字符串运算符等相关推荐

  1. 7-99 含有2个运算符的算数表达式(选作)7-100 运算符的优先级7-101 水仙花数判断

    目录 7-99 含有2个运算符的算数表达式(选作) 7-100 运算符的优先级 7-101 水仙花数判断 7-99 含有2个运算符的算数表达式(选作) 分数 30 全屏浏览题目 切换布局 作者 叶青 ...

  2. linux脚本或关系表达,Shell运算符:Shell算数运算符、关系运算符、布尔运算符、字符串运算符等...

    Bash 支持很多运算符,包括算数运算符.关系运算符.布尔运算符.字符串运算符和文件测试运算符. 原生bash不支持简单的数学运算,但是可以通过其他命令来实现,例如 awk 和 expr,expr 最 ...

  3. linux shell for while if case break continue echo test 及算术运算符 关系运算符 布尔运算符 逻辑运算符 字符串运算符 文件测试运算符

    linux shell for while if case break continue echo test 及算术运算符 关系运算符 布尔运算符 逻辑运算符 字符串运算符 文件测试运算符

  4. linux 脚本 数字运算符,Shell 基本运算符

    Shell 基本运算符 Shell 和其他编程语言一样,支持多种运算符,包括: 算数运算符 关系运算符 布尔运算符 字符串运算符 文件测试运算符 原生bash不支持简单的数学运算,但是可以通过其他命令 ...

  5. Shell教程(三):数组/Arrays、基本运算符

    定义数组值: 一个数组变量和标量变量之间的差异可以解释如下. 说,你正试图表示各种学生为变量集的名字.每一个单个变量是一个标量变量,如下所示: NAME01="Zara" NAME ...

  6. python赋值布尔变量_python基础 - 变量、布尔值、运算符、条件及循环语句

    文章目录 一.变量 变量包括数字,字母,下划线,且不能以数字开头: python可以同时为多个变量赋值,如a,b = 1,2 ; c,d = 5,"hh": 一个变量可以通过赋值指 ...

  7. python运算符(算数运算符、赋值运算符、复合赋值运算符、比较运算符、逻辑运算符)

    常见的运算符: 算数运算符 赋值运算符 复合赋值运算符 ⽐较运算符 逻辑运算符 1. 算数运算符 注意:         混合运算优先级顺序: () ⾼于 ** ⾼于 * / // % ⾼于 + - ...

  8. C++primer 第 4 章 表达式 4.1基础 4 . 2 算术运算符 4 .3 逻辑和关系运算符 4 . 4 赋值运算符 4 .5 递增和递减运算符 4.6成员访问运算符

    表达式由一个或多个运算对象(operand)组成,对表达式求值将得到一个结果(result) 字面值和变量是最简单的表达式(expression),其结果就是字面值和变量的值.把一个运算符(opera ...

  9. JAVA语言运算符(算数运算符、赋值运算符、比较运算符、逻辑运算符、三元运算)

    运算符 JAVA语言中将运算符分为:算数运算符.赋值运算符.比较运算符.逻辑运算符.三元运算符. 算数运算符:算数运算符是对数字进行一系列的加减乘除等的计算,常见的算数运算符如: public cla ...

最新文章

  1. 别让低效努力,毁了你
  2. 定制化Azure站点Java运行环境(2)
  3. 基于angular4+ng-bootstrap+bootstrap+scss的后台管理系统界面
  4. 程序员如何跟领导提离职_如何跟领导谈加薪,做好这几点,成功谈加薪又不失风度...
  5. tensorflow环境下的识别食物_Tensorflow object detection API 搭建属于自己的物体识别模型——环境搭建与测试...
  6. c++:MFC _cstring.h库常用函数
  7. Java中Collection与Collections的区别
  8. Unresolved reference ‘SQLAlchemy‘
  9. Navicat连接MySQL8.0版本时出现Client does not support authentication protocol requested by server;报错的问题解决办法
  10. 给MongoDB添加索引
  11. Vue Element校验validate
  12. 数据结构-栈的实现之括号匹配检测
  13. cudnn的安装 linux
  14. Save as PDF/X-3/4/5 error with pdflib
  15. 树莓派外接扩展板的的测试
  16. 三十岁那年,我的梦想是年薪十万
  17. 给开发兄弟上难度,一周内上线likeadmin的官网
  18. 课后习题3.4 编程序,用getchar函数读入两个字符给c1,c2,然后分别用putchar函数和cout语句输出这两个字符。并思考以下问题: (1)变量c1,c2应定义为字符型还是整形?抑或两者皆
  19. 数字图像处理复习(part1)
  20. 2022年中国汽车事件数据记录器(EDR)市场现状研究分析与发展前景预测报告

热门文章

  1. ThreadLocal是救火队长
  2. RocketMQ错误消息重试策略之Consumer的重试机制(timeout情况)
  3. FileNameFilter过滤器的使用和Lambda优化程序
  4. 基于jwt的用户鉴权:拦截器概述
  5. Maven(3)--聚合与继承
  6. python办公代码_[Python] 自动化办公 docx操作Word基础代码
  7. 常用LINQ关键字用法汇总
  8. 【Android休眠】之PowerKey唤醒源实现【转】
  9. 快递鸟电子面单打印功能基于java
  10. 流式套接字(SOCK_STREAM),数据报套接字 (SOCK_DGRAM) 的比较