1.shell支持多种运算符

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

2.算数运算符

运算符 说明 示例
+ `expr $a + $b` 结果为 30
- `expr $a - $b` 结果为 -10
* `expr $a \* $b` 结果为 200
/ `expr $b / $a` 结果为 2
% 取余 `expr $b % $a` 结果为 0
= 赋值 a=$b 将把变量 b 的值赋给 a
== 相等,用于比较2个数字 [ $a == $b ] 返回 false
!= 不相等,用于比较2个数字 [ $a != $b ] 返回 true
#!/bin/sh
a=4
b=2
c=3
echo "$a+$b="`expr $a + $b` #4+2=6
echo "$a-$b="`expr $a - $b` #4-2=2
echo "$a*$b="`expr $a \* $b` #4*2=8
echo "$a/$b="`expr $a / $b` #4/2=2
echo "$a%$b="`expr $a % $c` #4%2=1
if [ $a == $b ];then echo "$a=$b";else echo "$a!=$b";fi #4!=2
if [ $a != $c ];then echo "$a!=$c";else echo "$a=$c";fi #4!=3

注意:

1. *号前面必须加\才能实现乘法运算

2. Mac中shell expr语法是:$((表达式)),此处的乘法表示符*不需要转译

2.1 数学运算的5种方法

```#shell
#!/bin/sh
a=10
b=5
echo '`expr $a + $b`='`expr $a + $b` #`expr $a + $b`=15
echo '$[ `expr $a - $b` ]='$[ `expr $a - $b` ] #不常用 $[ `expr $a - $b` ]=5
echo '$(expr $a \* $b)='$(expr $a \* $b) #$(expr $a \* $b)=50
echo '$[ $a / $b ]='$[ $a / $b ] #$[ $a / $b ]=2
echo '$(($a+$b))='$(($a+$b)) #$(($a+$b))=15*
```

2.2 使用bc进行小数运算

```#shell
var=$(echo "变量1;变量2;变量3...;表达式"|bc)
```
命令行示例
```#shell
(echo "a=3;b=4.4;a * b"|bc)
```
脚本示例
```#shell
#!/bin/sh
width=`adb shell wm size|awk -F ':|x' '{print $2}'`
height=`adb shell wm size|awk -F ':|x' '{print $3}'`
x=$(echo "${width} * 0.66"|bc)
y=$(echo "${height} * 0.75"|bc)
echo $x,$y
adb shell input tap $x $y
```
结果:

3.关系运算符

运算符 数字 字符串
 [ -eq ]  检测两个数是否相等,相等返回 true。
 ;[ 5 -eq 5 ];echo $? => 0
 ;[ 5 -eq 3 ];echo $? => 1
不支持
 [ -ne ]  检测两个数是否不相等,不相等返回 true。
 [ 5 -ne 5 ];echo $? => 1
 [ 5 -ne 3 ];echo $? => 0
不支持
 [ -gt ]  检测左边的数是否大于右边的,如果是,则返回 true。
 [ 5 -gt 5 ];echo $? => 1
 [ 5 -gt 3 ];echo $? => 0
不支持
 [ -lt ]  检测左边的数是否小于右边的,如果是,则返回 true。
 [ 5 -lt 5 ];echo $? => 1
 [ 5 -lt 3 ];echo $? => 1
不支持
 [ -ge ]  检测左边的数是否大于等于右边的,如果是,则返回 true。
 [ 5 -ge 5 ];echo $? => 0
 [ 5 -ge 3 ];echo $? => 0
不支持
 [ -le ]  检测左边的数是否小于等于右边的,如果是,则返回 true。
 [ 5 -le 5 ];echo $? => 0
 [ 5 -le 3 ];echo $? => 1
不支持
[ > ] 不支持,一直返回true
 [ 5 > 5 ];echo $? => 0
 [ 5 > 6 ];echo $? => 0
不支持,一直返回true
 [ "h" > "a" ];echo $? => 0
 [ "h" > "w" ];echo $? => 0
[ >= ] 不支持
[ 5 >= 4 ];echo $? => unary operator expected
不支持
[ "h" >= "w" ];echo $? => unary operator expected
[ 不支持,一直返回true
 [ 5 0
 [ 5 0
不支持,一直返回true
 [ "h" 0
 [ "h" 0
[ 不支持
[ 5 unary operator expected
不支持
[ "h" unary operator expected
[ = ]
[ == ]
检测两个数是否相等,相等返回 true。
 [ 5 = 5 ];echo $? => 0
 [ 5 = 3 ];echo $? => 1
[ 5 == 5 ];echo $? => 0
[ 5 == 3 ];echo $? => 1
检测两个字符串是否相等,相等返回 true。
 [ "hello" = "hello" ];echo $? => 0
 [ "hello" = "world" ];echo $? => 1
[ "hello" == "hello" ];echo $? => 0
[ "hello" == "world" ];echo $? => 1
[ != ] 检测两个数是否不相等,不相等返回 true。
 [ 5 != 5 ];echo $? => 1
 [ 5 != 3 ];echo $? => 0
检测两个字符串是否不相等,不相等返回 true。
 [ "hello" != "hello" ];echo $? => 1
 [ "hello" != "world" ];echo $? => 0
[[ > ]] 检测左边的数是否大于右边的,如果是,则返回 true。
 [[ 5 > 4 ]];echo $? => 0
 [[ 5 > 6 ]];echo $? => 0
检测左边的字符串是否大于右边的,如果是,则返回 true。
 [[ "h" > "a" ]];echo $? => 0
 [[ "h" > "w" ]];echo $? => 1
[[ 检测左边的数是否小于右边的,如果是,则返回 true。
 [[ 5 1
 [[ 5 0
检测左边的字符串是否小于右边的,如果是,则返回 true。
 [[ "h" 1
 [[ "h" 0
[[ = ]]
[[ == ]]
检测两个数是否相等,相等返回 true。
 [[ 5 = 5 ]];echo $? => 0
 [[ 5 = 3 ]];echo $? => 1
[[ 5 == 5 ]];echo $? => 0
[[ 5 == 3 ]];echo $? => 1
检测两个字符串是否相等,相等返回 true。
 [[ "hello" = "hello" ]];echo $? => 0
 [[ "hello" = "world" ]];echo $? => 1
[[ "hello" == "hello" ]];echo $? => 0
[[ "hello" == "world" ]];echo $? => 1
[[ != ]] 检测两个数是否不相等,不相等返回 true。
 [[ 5 != 5 ]];echo $? => 1
 [[ 5 != 3 ]];echo $? => 0
检测两个字符串是否不相等,不相等返回 true。
 [[ "hello" != "hello" ]];echo $? => 1
 [[ "hello" != "world" ]];echo $? => 0
((>)) 检测左边的数是否大于右边的,如果是,则返回 true。
 ((5>4));echo $? => 0
 (( 5 > 6 ));echo $? => 0
不支持,一直返回true。
 (( "h" > "a" ));echo $? => 0
 (("h" > "w"));echo $? => 1
((>=)) 检测左边的数是否大于右边的,如果是,则返回 true。
 ((5>=4));echo $? => 0
 (( 5 >= 6 ));echo $? => 0
不支持,一直返回true。
 (( "h" >= "a" ));echo $? => 0
 (("h" >= "w"));echo $? => 1
(( 检测左边的数是否小于右边的,如果是,则返回 true。
 ((5 1
 ((5 0
不支持,始终返回false。
 (("h" 1
 (("h" 1
(( 检测左边的数是否小于右边的,如果是,则返回 true。
 ((5 1
 ((5 0
不支持,始终返回true。
 (("h" 1
 (("h" 1
((==)) 检测两个数是否相等,相等返回 true。
 ((5 == 5));echo $? => 0
 ((5 == 3));echo $? => 1
不支持,始终返回true。
 (("hello" == "hello"));echo $? => 0
 (("hello" == "world"));echo $? => 0
((!=)) 检测两个数是否不相等,相等返回 true。
 ((5 != 5 ));echo $? => 1
 ((5 != 3));echo $? => 0
不支持,始终返回false。
 (("hello" != "hello"));echo $? => 1
 (("hello" != "world"));echo $? => 1

```#shell
#!/bin/sh
a=10
b=4
if [ $a -gt $b ];then echo "$a>$b";else echo "$a4
if [ $a -ge $b ];then echo "$a>=$b";else echo "$a=4
if [ $a -lt $b ];then echo "$a=$b";fi #10>=4
if [ $a -le $b ];then echo "$a$b";fi #10>4
if [ $a -eq $b ];then echo "$a=$b";else echo "$a!=$b" ;fi #10!=4
if [ $a -ne $b ];then echo "$a!=$b";else echo "$a=$b";fi #10!=4
if(($a>$b));then echo "$a>$b";else echo "$a4
if(($a=$b";else echo "$a=4
if(($a=$b));then echo "$a=$b";fi #10>=4
if(($a!=$b));then echo "$a$b";fi #10>4
if(($a>=$b));then echo "$a=$b";else echo "$a!=$b" ;fi #10!=4
if(($a3.1关系运算符总结

数字 字符串
[ ] -eq、-ne、-gt、-lt、-ge、-le
=、==、!=
=、==、!=
[[ ]] >、

>、
(( )) >、>=、

不支持

4.布尔逻辑运算符

</tr>
<tr>
<td style="text-align: center;">非</td>
<td> &#160 <font color="green">! 在[ ] [[ ]]中都能使用</font><br>&#160 [ ! 10 -eq 10 ];echo $?</td>
<td>&#160 [[ ! $a > 0 ]];echo $? => 1</td>
</tr>
&nbsp -a在[ ]中使用
&#160[ 10 -lt 100 -a 20 -gt 100 ];echo $? => 1
&#160 &&在[[ ]]中使用
&#160 [[ 10 -lt 100 && 20 -gt 100 ]];echo $? => 1
&#160 -o在[ ]中使用
&#160 [ 10 -lt 100 -o 20 -gt 100 ];echo $? => 0
&#160 ||在[[ ]]中使用
&#160 [[ $a -lt 100 || $b -gt 100 ]];echo $? => 0

5. 字符串运算符

字符串比较主要是等或不等,是否为空和使用通配符
字符串对比: 从首字母开始,对比ascii码值,如果首字母一样,再对比第二位...

运算符 说明 示例
[ = ]
[ == ]
[[ = ]]
[[ = ]]
检测两个字符串是否相等,相等返回 true。 [ $a = $b ] 返回 false。
!= 检测两个字符串是否相等,不相等返回 true。 [ $a != $b ] 返回 true。
-z 检测字符串长度是否为0,为0返回 true。 [ -z $a ] 返回 false。
-n 检测字符串长度是否为0,不为0返回 true。 [ -n "$a" ] 返回 true。
str 检测字符串是否为空,不为空返回 true。 [ $a ] 返回 true。
使用正则表达式匹配字符串 *表示0或多个字符
?表示单个字符
[[ "xxxx" == x* ]];echo $? => 0
[[ "xxxx" == x??? ]];echo $? => 0

```#shell
a="abc"
b="efg"

if [ $a = \(b ];then echo "\)a = \(b:相等";else echo "\)a = $b: 不等";fi #abc = efg: 不等

if [ $a != \(b ];then echo "\)a != $b : 不等";else echo "是否不想等: 相等";fi #abc != efg : 不等

if [ -z $a ];then echo "-z $a : 字符串长度为 0";else echo "-z \(a : 字符串长度不为 0" ;fi #-z abc : 字符串长度不为 0
if [ -n "\)a" ];then echo "-n $a : 字符串长度不为 0";else echo "-n $a : 字符串长度为 0";fi #-n abc : 字符串长度不为 0

if [ \(a ];then echo "\)a : 字符串不为空";else echo "$a : 字符串为空";fi #abc : 字符串不为空


<h1>6. 文件测试运算符</h1>
文件测试运算符用于检测文件的各种属性,常用的是-d,-f,-r,-w,-x,-e,-s
<table border="1">
<tr>
<td style="text-align: center;">运算符</td>
<td>说明</td>
<td>示例</td>
</tr>
<tr>
<td style="text-align: center;">-d file</td>
<td>检测文件是否是目录,如果是,则返回 true。</td>
<td>[ -d $file ] 返回 false。</td>
</tr>
<tr>
<td style="text-align: center;">-f file </td>
<td>检测文件是否是普通文件(既不是目录,也不是设备文件),如果是,则返回 true。</td>
<td>[ -f $file ] 返回 true。</td>
</tr>
<tr>
<td style="text-align: center;">-r file </td>
<td> 检测文件是否可读,如果是,则返回 true。</td>
<td>[ -r $file ] 返回 true。</td>
</tr>
<tr>
<td style="text-align: center;">-w file </td>
<td>检测文件是否可写,如果是,则返回 true。</td>
<td>[ -w $file ] 返回 true。</td>
</tr>
<tr>
<td style="text-align: center;">-x file </td>
<td>检测文件是否可执行,如果是,则返回 true。</td>
<td>[ -x $file ] 返回 true。</td>
</tr>
<tr>
<td style="text-align: center;">-e file</td>
<td>检测文件(包括目录)是否存在,如果是,则返回 true。</td>
<td>[ -e $file ] 返回 true。</td>
</tr>
<tr>
<td style="text-align: center;">-s file</td>
<td>检测文件是否为空(文件大小是否大于0),不为空返回 true.</td>
<td>[ -s $file ] 返回 true。</td>
</tr>
<tr>
<td style="text-align: center;">-b file</td>
<td> 检测文件是否是块设备文件,如果是,则返回 true。 </td>
<td> [ -b $file ] 返回 false。</td>
</tr>
<tr>
<td style="text-align: center;">-c file</td>
<td>检测文件是否是字符设备文件,如果是,则返回 true。</td>
<td>[ -c $file ] 返回 false。</td>
</tr>
<tr>
<td style="text-align: center;">-g file</td>
<td>检测文件是否设置了 SGID 位,如果是,则返回 true。</td>
<td>[ -g $file ] 返回 false。</td>
</tr>
<tr>
<td style="text-align: center;">-k file</td>
<td>检测文件是否设置了粘着位(Sticky Bit),如果是,则返回 true。</td>
<td>[ -k $file ] 返回 false。</td>
</tr>
<tr>
<td style="text-align: center;">-p file</td>
<td>检测文件是否是有名管道,如果是,则返回 true。</td>
<td>[ -p $file ] 返回 false。</td>
</tr>
<tr>
<td style="text-align: center;">-u file </td>
<td>检测文件是否设置了 SUID 位,如果是,则返回 true。</td>
<td>[ -u $file ] 返回 false。</td>
</tr>
</table>
```#shell
#!/bin/sh
file="screencap"
if [ -e $file ];then echo "$file 存在";else echo "$file 不存在,创建";mkdir -p $file;fi #screencap 存在
if [ -d $file ];then echo "$file 是目录";else echo "$file 不是目录";fi #screencap 是目录
if [ -f $file ];then echo "$file 是文件";else echo "$file 不是文件";fi #screencap 不是文件
ls > land.txt
file2="land.txt"
if [ -r $file2 ];then echo "$file2 可读";else echo "$file2 不可读";fi #land.txt 可读
if [ -w $file ];then echo "$file2 可写";else echo "$file2 不可写";fi #land.txt 可写
if [ -x $file2 ];then echo "$file2 可执行";else echo "$file2 不可执行";fi #land.txt 不可执行
if [ -s $file2 ];then echo "$file2 不为空";else echo "$file2 为空";fi #land.txt 不为空
if [ $file2 ];then echo "$file2 存在";else echo "$file2 不存在";fi #land.txt 存在

shell 6基本运算符的更多相关文章

  1. Linux学习——shell编程之运算符

    shell编程之运算符 一:shell中常见算术运算符号和优先级 二:算术运算符 Shell 变量:是弱类型!不能进行加减乘除!比较麻烦! 例子 :shell变量弱类型 a=11 b=22 echo ...

  2. 『忘了再学』Shell基础 — 20、Shell中的运算符

    目录 1.Shell常用运算符 2.Shell中数值运算的方法 (1)方式一 (2)方式二 (3)方式三(推荐) 1.Shell常用运算符 Shell中常用运算符如下表: 优先级数值越大优先级越高,具 ...

  3. shell的比较运算符

    运算符 描述 示例 文件比较运算符 -e filename 如果 filename 存在,则为真 [ -e /var/log/syslog ] -d filename 如果 filename 为目录, ...

  4. linux shell “(())” 双括号运算符使用

    导读 在刚开始学习inux shell脚本编程时候,对于它的 四则运算以及逻辑运算.估计很多朋友都感觉比较难以接受.特变逻辑运算符"[]"使用时候,必须保证运算符与算数 之间有空格 ...

  5. shell之算数运算符、逻辑运算符、关系运算符、布尔运算符、文件测试运算符

    注意事项: (1)bash不支持简单的数学运算,但是可以通过其他命令来实现,例如 awk 和 expr,expr 最常用: (2)完整的表达式要被 ` ` 包含,注意这个字符不是常用的单引号,在 Es ...

  6. Shell自学之运算符和echo(W3C)

    上面理论知识,最下面有我做的测试的例子: 10.Shell运算符 expr是一款表达式计算工具,使用它能完成表达式的求值操作 例:val=`expr 2 + 2`;echo "${val}& ...

  7. linux shell (()) 双括号运算符使用

    估计很多朋友都感觉比较难以接受.特变逻辑运算符"[]"使用时候,必须保证运算符与算数 之间有空格. 四则运算也只能借助:let,expr等命令完成. 今天讲的双括号"(( ...

  8. Shell脚本学习 - 运算符

    继续shell脚本学习.上一篇是基本数据类型和语法的总结,这一篇是运算相关的操作. 运算符 bash不支持简单的数学计算,需要依赖其他命令实现. expr可以代为实现. # 表达式一般这么写 ` + ...

  9. shell编程 之 运算符

    1 shell运算符简介 Shell 和其他编程语言一样,支持多种运算符,包括: 算数运算符 形如:val=`expr 2 + 2`:echo "两数之和为 : $val"    ...

随机推荐

  1. 【数据库】MFC ODBC(二)

    三.CRecordset类 1.IsBOF与IsEOF (1)IsBOF 如果记录集没有记录,或已经向前游动到第一个记录之前,则返回非零:否则返回0.详细说明如下: 1)访问Open函数之后,如果记录 ...

  2. bean的实例化

    bean的实例化 构造器方式 静态方法方式 普通工厂方式 一般的,默认bean实例化使用的是构造器方式,调用的是无参的构造方法 package com.Model; public class Dog ...

  3. ZedGraph实时曲线实例

    2010-10-17 11:23:58| 分类: ASP.NET |举报|字号 订阅public partial class FrmMain : Form { // 起始时间以毫秒为单位 int ti ...

  4. 想ACCESS数据库插入新的用户

    public string AddUserN = ""; //定义用户名字符串 public string paswrd1 = ""; //密码1 public ...

  5. Oracle中varchar2类型字段长度限制使用问题

    为纪念中华人民共和国建军90周年,特此一篇,以此纪念,我军威武!!! 一.问题背景 项目中商品发布,却没有保存成功. 二.问题定位 初步判断向数据库中保存时出现了错误,查看日志文件,由于日志文件过大就 ...

  6. C语言基础:常见循环语句 分类: iOS学习 c语言基础 2015-06-10 21:46 13人阅读 评论(0) 收藏

    for语句 for( 初始化表达式; 循环判断条件  ;增量表达式); while(条件表达式){ 循环体; } 先判断条件表达式,如果为真就执行循环体,执行完再去判断条件表达式 do{ 循环体; } ...

  7. pycharm中tensorflow代码不能自动补全或import红线问题解决

    正确安装并配置好pycharm+tensorflow环境之后,可能在pycharm中导入tensorflow会有以下问题: 1. " import tensorflow as tf &quo ...

  8. Linux删除Screen

    screen screen命令是用来解决远程运行服务器中程序时无法退出的尴尬问题. 介绍 有详细的一篇文章 linux screen 命令详解 问题 文章较老,难免有问题. 比如某用户评论: Ctrl ...

  9. 任务02——安装 Intellj IDEA,编写一个简易四则运算小程序,并将代码提交到 GitHub

    github地址:https://github.com/ErhuoHome/First.git 安装jdk与intellij idea没有太大问题,以前安装过eclipse 在程序方面,由于对真分数的 ...

  10. Unity插件-ShareSDK使用指南

    Unity插件ShareSDK使用教程 本文提供全流程,中文翻译.Chinar坚持将简单的生活方式,带给世人!(拥有更好的阅读体验 -- 高分辨率用户请根据需求调整网页缩放比例) 1 Summariz ...