Shell运算符:算术运算符、关系运算符、布尔运算符等

以下内容源于C语言中文网的学习与整理,非原创,如有侵权请告知删除。

expr表达式计算工具

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

expr 是一款表达式计算工具,使用它能完成表达式的求值操作。例如两个数相加,运行脚本输出Total value : 4

#!/bin/bashval=`expr 2 + 2`
echo "Total value : $val"

这里要特别注意:

(1)表达式和运算符之间要有空格,例如 2+2 是不对的,必须写成 2 + 2。

(2)完整的表达式要被 ` ` 包含,注意这个字符不是常用的单引号,在 Esc 键下边。

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

一、算术运算符

算术运算符列表
运算符说明举例
+加法`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。
#!/bin/sha=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 ]
thenecho "a is equal to b"
fiif [ $a != $b ]
thenecho "a is not equal to b"
fi
a + b : 30
a - b : -10
a * b : 200
b / a : 2
b % a : 0
a is not equal to b

注意:条件表达式要放在方括号之间,并且要有空格,例如 [$a==$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。

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

#!/bin/sha=10
b=20
if [ $a -eq $b ]
thenecho "$a -eq $b : a is equal to b"
elseecho "$a -eq $b: a is not equal to b"
fiif [ $a -ne $b ]
thenecho "$a -ne $b: a is not equal to b"
elseecho "$a -ne $b : a is equal to b"
fiif [ $a -gt $b ]
thenecho "$a -gt $b: a is greater than b"
elseecho "$a -gt $b: a is not greater than b"
fiif [ $a -lt $b ]
thenecho "$a -lt $b: a is less than b"
elseecho "$a -lt $b: a is not less than b"
fiif [ $a -ge $b ]
thenecho "$a -ge $b: a is greater or  equal to b"
elseecho "$a -ge $b: a is not greater or equal to b"
fiif [ $a -le $b ]
thenecho "$a -le $b: a is less or  equal to b"
elseecho "$a -le $b: a is not less or equal to b"
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

 

三、布尔运算符

布尔运算符列表
运算符说明举例
!非运算,表达式为 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。
#!/bin/sha=10
b=20if [ $a != $b ]
thenecho "$a != $b : a is not equal to b"
elseecho "$a != $b: a is equal to b"
fiif [ $a -lt 100 -a $b -gt 15 ]
thenecho "$a -lt 100 -a $b -gt 15 : returns true"
elseecho "$a -lt 100 -a $b -gt 15 : returns false"
fiif [ $a -lt 100 -o $b -gt 100 ]
thenecho "$a -lt 100 -o $b -gt 100 : returns true"
elseecho "$a -lt 100 -o $b -gt 100 : returns false"
fiif [ $a -lt 5 -o $b -gt 100 ]
thenecho "$a -lt 100 -o $b -gt 100 : returns true"
elseecho "$a -lt 100 -o $b -gt 100 : returns false"
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。[ $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。
#!/bin/sha="abc"
b="efg"if [ $a = $b ]
thenecho "$a = $b : a is equal to b"
elseecho "$a = $b: a is not equal to b"
fiif [ $a != $b ]
thenecho "$a != $b : a is not equal to b"
elseecho "$a != $b: a is equal to b"
fiif [ -z $a ]
thenecho "-z $a : string length is zero"
elseecho "-z $a : string length is not zero"
fiif [ -n $a ]
thenecho "-n $a : string length is not zero"
elseecho "-n $a : string length is zero"
fiif [ $a ]
thenecho "$a : string is not empty"
elseecho "$a : string is empty"
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

 

五、文件测试运算符

文件测试运算符列表
操作符说明举例
-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。

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

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

#!/bin/shfile="/var/www/tutorialspoint/unix/test.sh"if [ -r $file ]
thenecho "File has read access"
elseecho "File does not have read access"
fiif [ -w $file ]
thenecho "File has write permission"
elseecho "File does not have write permission"
fiif [ -x $file ]
thenecho "File has execute permission"
elseecho "File does not have execute permission"
fiif [ -f $file ]
thenecho "File is an ordinary file"
elseecho "This is sepcial file"
fiif [ -d $file ]
thenecho "File is a directory"
elseecho "This is not a directory"
fiif [ -s $file ]
thenecho "File size is zero"
elseecho "File size is not zero"
fiif [ -e $file ]
thenecho "File exists"
elseecho "File does not exist"
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

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/news/460750.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

AjaxControlToolkit的使用

摘自&#xff1a;http://www.cnblogs.com/zm235/archive/2008/05/09/1189558.html 暂时的做法&#xff1a; 把AjaxControlToolkit.dll复制到项目的bin目录里面,然后配置Web.config文件&#xff0c;例如&#xff1a; <configuration><system.web><pages><c…

Shell的注释

关于注释&#xff0c;了解三点内容。 &#xff08;1&#xff09;Shell脚本中&#xff0c;以“#”开头的行就是注释&#xff0c;会被解释器忽略。 &#xff08;2&#xff09;sh里没有多行注释&#xff0c;只能每一行加一个#号。 &#xff08;3&#xff09;遇到大段的代码需要…

linq中let关键字学习

linq中let关键字就是对子查询的一个别名&#xff0c;let子句用于在查询中添加一个新的局部变量&#xff0c;使其在后面的查询中可见。 linq中let关键字实例 1、传统下的子查询与LET关键字的区别 C# 代码 复制static void Main(string[] args) { int[] numbers new[] { 1, 2,…

分析与设计

分析与测试&#xff1a;代码质量&#xff0c;面向对象&#xff0c;测试&#xff0c;业务分析转载于:https://www.cnblogs.com/sofia/p/3381931.html

Shell中的字符串

字符串是shell编程中最常用最有用的数据类型&#xff08;除了数字和字符串&#xff0c;也没啥其它类型好用了&#xff09;&#xff0c;字符串可以用单引号&#xff0c;也可以用双引号&#xff0c;也可以不用引号。 单引号 strthis is a string 单引号字符串的限制&#xff1…

苹果

苹果 描述 ctest有n个苹果&#xff0c;要将它放入容量为v的背包。给出第i个苹果的大小和价钱&#xff0c;求出能放入背包的苹果的总价钱最大值。 输入有多组测试数据&#xff0c;每组测试数据第一行为2个正整数&#xff0c;分别代表苹果的个数n和背包的容量v&#xff0c;n、v同…

c# Ftp下载程序源代码解析

using System;using System.Collections.Generic;using System.ComponentModel;using System.Data;using System.Drawing;using System.Linq;using System.Text;using System.IO;using System.Net;using System.Threading.Tasks;using System.Windows.Forms;namespace 网络操作…

Shell输入输出重定向

Unix 命令默认从标准输入设备(stdin)获取输入&#xff0c;将结果输出到标准输出设备(stdout)显示。一般情况下&#xff0c;标准输入设备就是键盘&#xff0c;标准输出设备就是终端&#xff0c;即显示器。 一、输出重定向 命令的输出不仅可以是显示器&#xff0c;还可以是其他文…

一个基于POP3协议进行邮箱账号验证的类

最近老陈要针对企业邮箱做一些开发&#xff0c;以对接企业OA神马的&#xff0c;但企业邮箱唯独没有开放账号密码验证功能&#xff0c;很恼火&#xff01;不得已&#xff0c;翻出早些年的Asp代码改编成了C#类&#xff0c;实现了一个C#下的通过POP3协议进行邮箱账号验证的类&…

cobbler get-loaders 通过代理下载

2019独角兽企业重金招聘Python工程师标准>>> cobbler 版本是2.6.3&#xff0c;可以通过系统环境变量设置proxy&#xff0c;支持 HTTP_PROXY、HTTPS_PROXY、FTP_PROXY 三个变量。 cobbler 版本是2.6.6时&#xff0c;需要从/etc/cobbler/settings 中增加proxy_url_ex…

Shell文件包含

像其他语言一样&#xff0c;Shell 也可以包含外部脚本&#xff0c;将外部脚本的内容合并到当前脚本。 Shell 中包含脚本可以使用&#xff1a; . filename 或者 source filename 两种方式的效果相同。简单起见&#xff0c;一般使用点号(.)&#xff0c;但是注意点号(.)和文件…

Vim高级使用 - CentOS下使用VIM打造C/C++开发环境

使用TagList http://blog.csdn.net/fbfsber008/article/details/7044723 转载于:https://www.cnblogs.com/tiantao/p/2389126.html

Shell数组:shell数组的定义、数组长度

bash支持一维数组&#xff08;不支持多维数组&#xff09;&#xff0c;并且没有限定数组的大小。类似与C语言&#xff0c;数组元素的下标由0开始编号。获取数组中的元素要利用下标&#xff0c;下标可以是整数或算术表达式&#xff0c;其值应大于或等于0。 定义数组 在Shell中…

分析busybox的源码

以下内容源于网络资源的学习与整理&#xff0c;如有侵权请告知删除。 参考博客 busybox详解_linuxarmsummary的博客-CSDN博客 一、前言 因为uboot给内核传参的bootargs中有“init/linuxrc”这个项目&#xff0c;而由前面的分析可知/linuxrc这个二进制文件位于根文件系统中&…

Vmware vSphere 十个疑难问题解决方法

Vmware vSphere疑难问题解决方法导读&#xff1a;这里汇总了10个Vmware vSphere常见的问题&#xff1a;清除vSphere Client的登录记录、Linux系统VMXNET3虚拟网路卡时UDP包被Drop掉等&#xff0c;并给出了具体的解决办法。关键词&#xff1a;VMware vSphere1、清除vSphere Clie…

PHP中开发的良好习惯总结(持续更新) By ACReaper

最近在自己用php在写一个商城&#xff0c;再这个工程中学习到了很多的开发经验。 1.为了更好的调试和开发php&#xff0c;在开发状态中到php.ini设置开发的错误报告 在ubuntu中&#xff0c;其在/etc/php5/apache2/php.ini中。用命令打开后&#xff0c;找到 error_reporting E_…

Makefile中常用的函数

以下内容源于C语言中文网的学习与整理&#xff0c;非原创&#xff0c;如有侵权请告知删除。 一、Makefile中的函数格式 函数的调用和变量的调用很像。引用变量的格式为$(变量名)&#xff0c;而函数调用的格式如下&#xff1a; $(<function> <arguments>) 或者是…

彻底解决zend studio 下 assignment in condition警告

最近在mac系统下安装zend studio作为php开发工具&#xff0c;把以前的代码导入&#xff0c;发现项目中有很多 “assignment in condition”的警告&#xff0c;造成原因是在条件判断的if、while中使用了如下类似的做法&#xff1a; if ($res $other)while (($row $res->fet…

添加分页

<div style"text-align: center; padding-top: 10px"><webdiyer:AspNetPager ID"AspNetPager1" runat"server" PageSize"20" FirstPageText"首页"CssClass"anpager" LastPageText"尾页" NextP…

Makefile中命令的编写

以下内容源于C语言中文网的学习与整理&#xff0c;非原创&#xff0c;如有侵权请告知删除。 简述 Makefile的规则&#xff0c;是由依赖关系规则和命令组成的。 Makefile中所使用的命令是由 shell 命令行组成&#xff0c;它们是一条一条执行的。 Makefile 中的任何命令都要以ta…