关闭

Shell 基本运算符

标签: shell运算符
3843人阅读 评论(1) 收藏 举报
分类:

概述

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

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

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

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

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

#!/bin/bash

val=`expr 2 + 2`
echo "两数之和为 : $val"

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

两数之和为 : 4

两点注意:

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

算术运算符

这里写图片描述

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

栗子

假定变量 a 为 10,变量 b 为 20

#!/bin/bash

a=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 ]
then
   echo "a 等于 b"
fi
if [ $a != $b ]
then
   echo "a 不等于 b"
fi

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

a + b : 30
a - b : -10
a * b : 200
b / a : 2
b % a : 0
a 不等于 b

注意:

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

关系运算符

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

假定变量 a 为 10,变量 b 为 20

这里写图片描述

栗子

#!/bin/bash

a=10
b=20

if [ $a -eq $b ]
then
   echo "$a -eq $b : a 等于 b"
else
   echo "$a -eq $b: a 不等于 b"
fi
if [ $a -ne $b ]
then
   echo "$a -ne $b: a 不等于 b"
else
   echo "$a -ne $b : a 等于 b"
fi
if [ $a -gt $b ]
then
   echo "$a -gt $b: a 大于 b"
else
   echo "$a -gt $b: a 不大于 b"
fi
if [ $a -lt $b ]
then
   echo "$a -lt $b: a 小于 b"
else
   echo "$a -lt $b: a 不小于 b"
fi
if [ $a -ge $b ]
then
   echo "$a -ge $b: a 大于或等于 b"
else
   echo "$a -ge $b: a 小于 b"
fi
if [ $a -le $b ]
then
   echo "$a -le $b: a 小于或等于 b"
else
   echo "$a -le $b: a 大于 b"
fi

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

10 -eq 20: a 不等于 b
10 -ne 20: a 不等于 b
10 -gt 20: a 不大于 b
10 -lt 20: a 小于 b
10 -ge 20: a 小于 b
10 -le 20: a 小于或等于 b

布尔运算符

假定变量 a 为 10,变量 b 为 20:

这里写图片描述

栗子

#!/bin/bash

a=10
b=20

if [ $a != $b ]
then
   echo "$a != $b : a 不等于 b"
else
   echo "$a != $b: a 等于 b"
fi
if [ $a -lt 100 -a $b -gt 15 ]
then
   echo "$a -lt 100 -a $b -gt 15 : 返回 true"
else
   echo "$a -lt 100 -a $b -gt 15 : 返回 false"
fi
if [ $a -lt 100 -o $b -gt 100 ]
then
   echo "$a -lt 100 -o $b -gt 100 : 返回 true"
else
   echo "$a -lt 100 -o $b -gt 100 : 返回 false"
fi
if [ $a -lt 5 -o $b -gt 100 ]
then
   echo "$a -lt 100 -o $b -gt 100 : 返回 true"
else
   echo "$a -lt 100 -o $b -gt 100 : 返回 false"
fi

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

10 != 20 : a 不等于 b
10 -lt 100 -a 20 -gt 15 : 返回 true
10 -lt 100 -o 20 -gt 100 : 返回 true
10 -lt 100 -o 20 -gt 100 : 返回 false

逻辑运算符

假定变量 a 为 10,变量 b 为 20:

这里写图片描述

栗子

#!/bin/bash

a=10
b=20

if [[ $a -lt 100 && $b -gt 100 ]]
then
   echo "返回 true"
else
   echo "返回 false"
fi

if [[ $a -lt 100 || $b -gt 100 ]]
then
   echo "返回 true"
else
   echo "返回 false"
fi

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

返回 false
返回 true

字符串运算符

假定变量 a 为 “abc”,变量 b 为 “efg”

这里写图片描述

栗子

#!/bin/bash

a="abc"
b="efg"

if [ $a = $b ]
then
   echo "$a = $b : a 等于 b"
else
   echo "$a = $b: a 不等于 b"
fi
if [ $a != $b ]
then
   echo "$a != $b : a 不等于 b"
else
   echo "$a != $b: a 等于 b"
fi
if [ -z $a ]
then
   echo "-z $a : 字符串长度为 0"
else
   echo "-z $a : 字符串长度不为 0"
fi
if [ -n $a ]
then
   echo "-n $a : 字符串长度不为 0"
else
   echo "-n $a : 字符串长度为 0"
fi
if [ $a ]
then
   echo "$a : 字符串不为空"
else
   echo "$a : 字符串为空"
fi

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

abc = efg: a 不等于 b
abc != efg : a 不等于 b
-z abc : 字符串长度不为 0
-n abc : 字符串长度不为 0
abc : 字符串不为空

文件测试运算符

文件测试运算符用于检测 Unix 文件的各种属性。
属性检测描述如下:

这里写图片描述

栗子

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

#!/bin/bash

file="/var/www/xiaogongjiang/test.sh"
if [ -r $file ]
then
   echo "文件可读"
else
   echo "文件不可读"
fi
if [ -w $file ]
then
   echo "文件可写"
else
   echo "文件不可写"
fi
if [ -x $file ]
then
   echo "文件可执行"
else
   echo "文件不可执行"
fi
if [ -f $file ]
then
   echo "文件为普通文件"
else
   echo "文件为特殊文件"
fi
if [ -d $file ]
then
   echo "文件是个目录"
else
   echo "文件不是个目录"
fi
if [ -s $file ]
then
   echo "文件不为空"
else
   echo "文件为空"
fi
if [ -e $file ]
then
   echo "文件存在"
else
   echo "文件不存在"
fi

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

文件可读
文件可写
文件可执行
文件为普通文件
文件不是个目录
文件不为空
文件存在
1
0
查看评论

linux下的shell运算(加、减、乘、除)

((i=$j+$k))    等价于 i=`expr $j + $k` ((i=$j-$k))     等价于   i=`expr $j -$k` ((i=$j*$k))   &#...
  • zwx19921215
  • zwx19921215
  • 2014-03-12 16:25
  • 91706

Bash shell 字符串操作符详解

本文详细介绍一下Bash shell字符串操作的有关内容。 首先需要明白的一点是我们通常所用的变量替代 $varname 其实是 ${varname}的一种简写形式。其次,需要知道字符串操作的核心思想是:Bash shell字符串操作是通过在变量名varname和闭花括号}之间插入操作符来...
  • vmwang
  • vmwang
  • 2009-11-20 09:30
  • 1468

Linux---shell 基本操作符及常见符号

基本操作符 -s:  Check if file has size greater than 0 if yes then condition becomes true.   实际应用中,[ -s $file ]  如果$file内容不为空,或者file其实是个folde...
  • xinyuanqianxun1987
  • xinyuanqianxun1987
  • 2016-10-13 16:34
  • 118

shell脚本之运算符

Shell 基本运算符 Shell 和其他编程语言一样,支持多种运算符,包括: 1、算数运算符 2、关系运算符 3、布尔运算符 4、字符串运算符 5、文件测试运算符 算术运算符 下表列出了常用的算术运算符,假定变量 a 为 10,变量 b 为 20: 运算符 说明 举例 +...
  • zhushuai1221
  • zhushuai1221
  • 2016-09-13 15:50
  • 833

Linux 之 shell 比较运算符

运算符描述示例文件比较运算符-e filename如果 filename 存在,则为真[ -e /var/log/syslog ]-d filename如果 filename 为目录,则为真[ -d /tmp/mydir ]-f ...
  • sunboy_2050
  • sunboy_2050
  • 2011-09-30 10:16
  • 105047

Shell脚本比较运算符及逻辑运算符

1、数值 格式: test "num1" opr "num2" [ "num1" opr "num2" ] opr 取值: 相等:-eq 不等:-ne 大于:-gt 小于:...
  • isoleo
  • isoleo
  • 2014-12-16 16:54
  • 776

Shell学习总结之逻辑运算符及表达式

Shell学习总结之逻辑运算符及表达式 一. 运算符总结说明 1. 条件运算符 运算符号 代表意义 应用 说明 = 等于 整型或字符串比较: str1 = str2 字符串str1 和字符串str2 相等时返回真,如果在[]中,只能是字...
  • wirelessqa
  • wirelessqa
  • 2014-02-23 14:45
  • 11421

LINUX-SHELL之数字运算

在Bash shell环境中,可以利用let,(())和[]执行基本的算数操作。而在进行高级操作时,expr和bc这两个工具也会非常有用。数字的加减我们在shell中普通的变量赋值的时候会被存储为字符串。然而,我们可以用一些方法让他们可以像数字一样处理。#! /bin/bash no1=4 no2=...
  • li563868273
  • li563868273
  • 2016-04-28 21:28
  • 2910

shell变量算数运算

#!/bin/sh a=1 a=$(($a+1)) a=$[$a+1] a=`expr $a + 1` let a++ let a+=1 ((a++)) echo $a
  • woshiwanxin102213
  • woshiwanxin102213
  • 2014-07-29 11:15
  • 2576

Shell编程——Shell中的数学运算

在Linux Shell中进行数学运算,通常可以使用的运算符有: 简单运算: let [] (()) 高级运算: expr bc 1、let命令let命令是bash内置命令,可以实现简单的算术以及逻辑运算,通过help let命令,可以查询到let命令的具体使用方法。使用方法:#!/bin/sh...
  • google19890102
  • google19890102
  • 2016-04-05 17:24
  • 2281
    个人资料
    • 访问:1313696次
    • 积分:19067
    • 等级:
    • 排名:第557名
    • 原创:459篇
    • 转载:0篇
    • 译文:5篇
    • 评论:149条
    WeChat
      欢迎关注我的公众号,干货只有干货,还有更多惊喜和资源在等着你
    博客专栏