Shell运算符

11 篇文章 0 订阅





和其他编程语言类似,Shell支持多种运算符:算数运算符、自增自减运算符、关系运算符、布尔运算符、逻辑运算符、字符串运算符和文件测试运算符

1、算数运算符


原生Bash不支持简单的数学运算,只能通过其他命令来实现,例如awkexpr

expr是一款最常用的表达式计算工具,它能帮助我们完成表达式的求值操作

Shell中常用的算术运算符及使用如下:

运算符名称语法
+`expr $a + $b`
-`expr $a - $b`
*`expr $a \* $b`
/`expr $b / $a`
%取余`expr $b % $a`
=赋值a=$b
==相等[ $a == $b ]
!=不相等[ $a != $b ]

使用注意

  • 表达式与运算符之间要有空格
  • 完整的求值表达式必须被 ` `包含
  • 条件表达式必须放在[]之间,且要有空格

以下是一个示例:

#!/bin/bash
a=2
b=3

val=`expr $a - $b`
echo "a - b = $val"

val=`expr $a \* $b`
echo "a * b = $val"

if [ $a == $b ]
then
   echo "a 等于 b"
else
   echo "a 不等于 b"
fi

执行脚本,输出结果如下:

a - b = -1
a * b = 6
a 不等于 b

2、自增自减运算符


Shell本身没有提供类似Java那样的++--操作符,但可以通过其他方式实现该功能

以下是一些常见的方式:

2.1、使用let命令

let命令允许对整数进行自增自减算术运算。使用语法如下:

# 自增
let i++
# 自减
let i--

2.2、使用$(( ))语法

$(( ))是进行算术运算的语法之一。使用语法如下:

# 自增
i=$((i + 1))
# 自减
i=$((i - 1))

2.3、使用(( ))语法

$(( ))类似,(( ))也是用于算术运算的语法之一。使用语法如下:

# 自增
((i++))
# 自减
((i--))

2.4、使用expr命令

expr命令可以用于算术运算,但不如let$(( ))常用。使用语法如下:

# 自增
i=$(expr $i + 1)
# 自减
i=$(expr $i - 1)

以下是一个示例:

#!/bin/bash
i=5

# 自增
let i++
echo "$i"
# 自减
i=$((i - 1))
echo "$i"
# 自增
((i++))
echo "$i"

执行脚本,输出结果如下:

6
5
6

3、关系运算符


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

Shell中常用的关系运算符及使用如下:

运算符名称语法
-eq等于[ $a -eq $b ]
-ne不等于[ $a -ne $b ]
-gt大于[ $a -gt $b ]
-lt小于[ $a -lt $b ]
-ge大于等于[ $a -ge $b ]
-le小于等于[ $a -le $b ]

以下是一个示例:

#!/bin/bash
a=2
b=3

if [ $a -eq $b ]
then
   echo "$a 等于 $b"
else
   echo "$a 不等于 $b"
fi

执行脚本,输出结果如下:

2 不等于 3

4、布尔运算符


Shell中的布尔运算符包括:与或非

运算符名称描述
!真为假,假为真
-o有真为真,全假为假
-a有假为假,全真为真

以下是一个示例:

#!/bin/bash
a=2
b=3

if [ $b -lt 10 -a $a -gt 1 ]
then
   echo "$b 小于 10 且 $a 大于 1 : 返回 true"
fi

执行脚本,输出结果如下:

3 小于 102 大于 1 : 返回 true

5、逻辑运算符


Shell中的逻辑运算符与Java相同,包括:逻辑AND和逻辑OR

运算符名称语法示例
&&逻辑AND[[ $a -lt 10 && $b -gt 1 ]]
||逻辑OR[[ $a -lt 10 || $b -gt 1 ]]

以下是一个示例:

#!/bin/bash
a=2
b=3

if [[ $b -lt 10 && $a -gt 1 ]]
then
   echo "$b 小于 10 且 $a 大于 1 : 返回 true"
fi

执行脚本,输出结果如下:

3 小于 102 大于 1 : 返回 true

6、字符串运算符


Shell中常用的字符串运算符及使用如下:

运算符名称语法
=两个字符串是否相等[ $a = $b ]
!=两个字符串是否不相等[ $a != $b ]
=~字符串是否与正则匹配[ $a =~ regex ]
-z字符串是否为空(长度是否为0)[ -z $a ]
-n字符串是否非空(长度是否不为0)[ -n $a ]
$字符串是否不为空[ $a ]

以下是一个示例:

#!/bin/bash
a="abc"
b=""

if [ -z $b ];then
   echo "$b 字符串长度为0"
fi
if [ -n "$a" ];then
   echo "$a 字符串长度不为0"
fi
if [ $b ];then
   echo "$b 字符串为空"
fi
if [ $a =~ "^a" ];then
   echo "$a 字符串匹配正则"
fi

执行脚本,输出结果如下:

 字符串长度为0
abc 字符串长度不为0
 字符串为空
abc 字符串匹配正则

7、文件测试运算符


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

运算符名称语法
-d是否是目录[ -d $file ]
-f是否是文件[ -f $file ]
-r是否可读[ -r $file ]
-w是否可写[ -w $file ]
-x是否可执行[ -x $file ]
-s是否为空(文件大小是否大于0)[ -s $file ]
-e文件或目录是否存在[ -e $file ]

以下是一个示例:

#!/bin/bash
file="/var/log/test.log"

if [ -f $file ];then
   echo "$file 是普通文件"
fi
if [ -d $file ];then
   echo "$file 是目录"
fi
if [ -e $file ];then
   echo "文件或目录存在"
else
   echo "文件或目录不存在"
fi

执行脚本,输出结果如下:

/var/log/test.log 是普通文件
文件或目录存在


评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值