Shell 基本运算符

Shell 和其他编程语言一样,支持多种运算符,包括:

  • 算数运算符
  • 关系运算符
  • 布尔运算符
  • 字符串运算符
  • 文件测试运算符

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

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

例如,两个数相加(注意使用的是反引号 ` 而不是单引号 '):

#!/bin/sh
a=10
b=20
var1=`expr  $a + $b`
var2=`expr $a - $b`
var3=`expr $a \* $b`
var4=`expr $a / $b`
if [ $a == $b ]
then
echo "a==b"
fi
if [ $a != $b ]
then
echo "a!=b"
fi
echo "两数之和:"${var1}
echo "两数之差"$var2
echo "两数相乘:"$var3
echo "两数取余:"$var4

两点注意:

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

下表列出了常用的算术运算符,假定变量 a 为 10,变量 b 为 20:

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

注意:

  • 乘号(*)前边必须加反斜杠(\)才能实现乘法运算;
  • if...then...fi 是条件语句,后续将会讲解。
  • 在 MAC 中 shell 的 expr 语法是:$((表达式)),此处表达式中的 "*" 不需要转义符号 "\" 。

输出结果

关系运算符

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

下表列出了常用的关系运算符,假定变量 a 为 10,变量 b 为 20:

关系运算符实例如下:

#!/bin/bash
a=10
b=20if [ $a -eq $b ]
thenecho "$a -eq $b : a 等于 b"
elseecho "$a -eq $b: a 不等于 b"
fi

布尔运算符

下表列出了常用的布尔运算符,假定变量 a 为 10,变量 b 为 20:

实例

布尔运算符实例如下:

 1 #!/bin/bash
 2 a=10
 3 b=20
 4
 5 if [ $a != $b ]
 6 then
 7    echo "$a != $b : a 不等于 b"
 8 else
 9    echo "$a != $b: a 等于 b"
10 fi
11 if [ $a -lt 100 -a $b -gt 15 ]
12 then
13    echo "$a 小于 100 且 $b 大于 15 : 返回 true"
14 else
15    echo "$a 小于 100 且 $b 大于 15 : 返回 false"
16 fi

逻辑运算符

以下介绍 Shell 的逻辑运算符,假定变量 a 为 10,变量 b 为 20:

实例

逻辑运算符实例如下:

#!/bin/basha=10
b=20if [[ $a -lt 100 && $b -gt 100 ]]
thenecho "返回 true"
elseecho "返回 false"
fiif [[ $a -lt 100 || $b -gt 100 ]]
thenecho "返回 true"
elseecho "返回 false"
fi

字符串运算符

下表列出了常用的字符串运算符,假定变量 a 为 "abc",变量 b 为 "efg":

实例

字符串运算符实例如下:

#!/bin/basha="abc"
b="efg"if [ $a = $b ]
thenecho "$a = $b : a 等于 b"
elseecho "$a = $b: a 不等于 b"
fi
if [ $a != $b ]
thenecho "$a != $b : a 不等于 b"
elseecho "$a != $b: a 等于 b"
fi
if [ -z $a ]
thenecho "-z $a : 字符串长度为 0"
elseecho "-z $a : 字符串长度不为 0"
fi
if [ -n "$a" ]
thenecho "-n $a : 字符串长度不为 0"
elseecho "-n $a : 字符串长度为 0"
fi
if [ $a ]
thenecho "$a : 字符串不为空"
elseecho "$a : 字符串为空"
fi

文件测试运算符

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

属性检测描述如下:

实例

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

#!/bin/bashfile="/var/www/runoob/test.sh"
if [ -r $file ]
thenecho "文件可读"
elseecho "文件不可读"
fi
if [ -w $file ]
thenecho "文件可写"
elseecho "文件不可写"
fi
if [ -x $file ]
thenecho "文件可执行"
elseecho "文件不可执行"
fi
if [ -f $file ]
thenecho "文件为普通文件"
elseecho "文件为特殊文件"
fi
if [ -d $file ]
thenecho "文件是个目录"
elseecho "文件不是个目录"
fi
if [ -s $file ]
thenecho "文件不为空"
elseecho "文件为空"
fi
if [ -e $file ]
thenecho "文件存在"
elseecho "文件不存在"
fi

转载于:https://www.cnblogs.com/xiaotang5051729/p/9300890.html

shell脚本的学习(二)相关推荐

  1. Linux shell脚本基础学习详细介绍(完整版)一

    Linux shell脚本基础学习这里我们先来第一讲,介绍shell的语法基础,开头.注释.变量和 环境变量,向大家做一个基础的介绍,虽然不涉及具体东西,但是打好基础是以后学习轻松地前提. 1. Li ...

  2. Linux shell脚本基础学习详细介绍(完整版)

    Linux shell脚本基础学习这里我们先来第一讲,介绍shell的语法基础,开头.注释.变量和 环境变量,向大家做一个基础的介绍,虽然不涉及具体东西,但是打好基础是以后学习轻松地前提. 1. Li ...

  3. 【博学谷学习记录】超强总结,用心分享 | 狂野大数据shell脚本个人学习复习记录—PART-03

    shell脚本个人学习&复习记录--PATR-01 shell脚本个人学习&复习记录--PATR-02 Shell的函数 function可以不用写 ()中不能放任何东西#定义函数-- ...

  4. Linux shell脚本基础学习

    Linux shell脚本基础学习这里我们先来第一讲,介绍shell的语法基础,开头.注释.变量和 环境变量,向大家做一个基础的介绍,虽然不涉及具体东西,但是打好基础是以后学习轻松地前提. 1. Li ...

  5. Shell 脚本基础学习 (四)

    现在我们来讨论编写一个脚本的一般步骤.任何优秀的脚本都应该具有帮助和输入参数.并且写一个伪脚本(framework.sh),该脚本包含了大多数脚本都需要的框架结构,是一个非常不错的主意.这时候,在写一 ...

  6. shell脚本应用(二)

    防伪码:会当凌绝顶,一览众山小!  第六章 shell脚本应用(二) 前言:为了使shell脚本具有一定的"判断"能力,根据不同的条件来完成不同的管理任务.使脚本具有一定的&quo ...

  7. Linux shell脚本基础学习详细介绍(完整版)2

    详细介绍Linux shell脚本基础学习(五) Linux shell脚本基础前面我们在介绍Linux shell脚本的控制流程时,还有一部分内容没讲就是有关here document的内容这里继续 ...

  8. 详细介绍Linux shell脚本基础学习(一)

    2019独角兽企业重金招聘Python工程师标准>>> Linux shell脚本基础学习这里我们先来第一讲,介绍shell的语法基础,开头.注释.变量和 环境变量,向大家做一个基础 ...

  9. shell脚本编程学习笔记6(xdl)——字符串截取命令

    shell脚本编程学习笔记6--字符串截取命令 1,cut命令 [root@localhost ~]# cut [选项] 文件名-f 列号,表示提取第几列-d 分隔符,按照指定的分隔符分割列注意:默认 ...

最新文章

  1. python_day10
  2. 到底什么是生成式对抗网络GAN?
  3. 什么是分布式_终于搞懂分布式锁是什么了
  4. 网管员心声:Windows服务有“备”无患
  5. 在Pivotal Web Service上发布Spring Boot应用
  6. TiDB 在 Ping++ 金融聚合支付业务中的实践
  7. 笔记05 局部类型
  8. prim算法_历时两月,终拿字节跳动offer,算法面试题分享「带答案」
  9. 洛谷——P1000 超级玛丽游戏
  10. 正宗PC Unix实验环境
  11. 070 random模块的使用
  12. Java中使用正则表达式
  13. 百度首页制作 (仿百度首页)
  14. 华为薪酬(2002年左右)
  15. 帅帅什么意思_帅帅帅是什么意思
  16. 【脚本小子狂喜】日常实用脚本推荐
  17. Docker从入门到实战(二)
  18. Xshell6下载与安装
  19. 微信小程序--小程序及微信生态圈
  20. 大众创业热度不减,好机友项目强势来袭

热门文章

  1. 错误票据java_【蓝桥杯】错误票据 - osc_bskh1wlw的个人空间 - OSCHINA - 中文开源技术交流社区...
  2. python压缩教程_无需压缩软件,用python帮你操作压缩包
  3. ssh 无法连接 z/OS 主机
  4. java spring 登录验证_浅析Spring Security登录验证流程源码
  5. 百度地图Polyline 清除
  6. 大数据时代下的信息安全
  7. VB判断窗体是否加载函数
  8. VB小技巧 文本框中屏蔽系统右键菜单用自定义菜单代替自带右键菜单
  9. 32位/64位WIN2003各版本支持内存列表 彻底解决XP系统无法支持4G内存的问题
  10. DeepMind登上Science:“和AI相比,人类都是猪队友”,团战称霸雷神之锤3