shell 6基本运算符

shell支持多种运算符:

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

算数运算符

+    加    `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
#shell
#!/bin/sh
a=4
b=2
c=3
echo "$a+$b="`expr $a + $b`
echo "$a-$b="`expr $a - $b`
echo "$a*$b="`expr $a \* $b`
echo "$a/$b="`expr $a / $b`
echo "$a%$b="`expr $a % $c`
if [ $a == $b ];then
    echo "$a=$b"
else
    echo "$a!=$b"
fi
if [ $a != $c ];then
    echo "$a!=$c"
else
    echo "$a=$c"
fi

4+2=6

4-2=2

42=8

4/2=2

4%2=1

4!=2

4!=3*

注意:

  • *号前面必须加\才能实现乘法运算
  • Mac中shell expr语法是:$((表达式)),此处的*不需要转译
#shell
#!/bin/sh
a=4
b=2
c=3
echo "$a+$b="`expr $(($a+$b))`
echo "$a-$b="`expr $(($a-$b))`
echo "$a*$b="`expr $(($a*$b))`
echo "$a/$b="`expr $(($a/$b))`
echo "$a%$b="`expr $(($a%$c))`

4+2=6

4-2=2

42=8

4/2=2

4%2=1*

关系运算符

关系运算符只支持数字,不支持字符串,除非字符串的值是数字
-eq 检测两个数是否相等,相等返回 true。    [ $a -eq $b ]
-ne 检测两个数是否不相等,不相等返回 true。  [ $a -ne $b ]
-gt 检测左边的数是否大于右边的,如果是,则返回 true。 [ $a -gt $b ]
-lt 检测左边的数是否小于右边的,如果是,则返回 true。 [ $a -lt $b ]
-ge 检测左边的数是否大于等于右边的,如果是,则返回 true。   [ $a -ge $b ]
-le 检测左边的数是否小于等于右边的,如果是,则返回 true。   [ $a -le $b ] 
#shell
#!/bin/sh
a=10
b=4
if [ $a -gt $b ];then
    echo "$a>$b"
else
    echo "$a<$b"
fi
if [ $a -ge $b ];then
    echo "$a>=$b"
else
    echo "$a<$b"
fi
if [ $a -lt $b ];then
    echo "$a<$b"
else
    echo "$a>=$b"
fi
if [ $a -le $b ];then
    echo "$a<=$b"
else
    echo "$a>$b"
fi
if [ $a -eq $b ];then
    echo "$a=$b"
else
    echo "$a!=$b"
fi
if [ $a -ne $b ];then
    echo "$a!=$b"
else
    echo "$a=$b"
fi

10>4

10>=4

10>=4

10>4

10!=4

10!=4

布尔运算符

!   非,表达式为 true 则返回 false,否则返回 true。    [ ! false ] 返回 true。
-o  或,有一个表达式为 true 则返回 true。    [ 10 -lt 20 -o 20 -gt 100 ] 返回 true。
-a  与,两个表达式都为 true 才返回 true。    [ 10 -lt 20 -a 20 -gt 100 ] 返回 false。
#shell
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 小于 100 且 $b 大于 15 : 返回 true"
else
   echo "$a 小于 100 且 $b 大于 15 : 返回 false"
fi
if [ $a -lt 100 -o $b -gt 100 ]
then
   echo "$a 小于 100 或 $b 大于 100 : 返回 true"
else
   echo "$a 小于 100 或 $b 大于 100 : 返回 false"
fi
if [ $a -lt 5 -o $b -gt 100 ]
then
   echo "$a 小于 5 或 $b 大于 100 : 返回 true"
else
   echo "$a 小于 5 或 $b 大于 100 : 返回 false"
fi

10 != 20 : a 不等于 b

10 小于 100 且 20 大于 15 : 返回 true

10 小于 100 或 20 大于 100 : 返回 true

10 小于 5 或 20 大于 100 : 返回 false

逻辑运算符

&&  逻辑的 AND [[ $a -lt 100 && $b -gt 100 ]] 返回 false
||          逻辑的 OR          [[ $a -lt 100 || $b -gt 100 ]] 返回 true
$shell
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

字符串运算符

=       检测两个字符串是否相等,相等返回 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。
#shell
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 : 字符串不为空

文件测试运算符

文件测试运算符用于检测文件的各种属性
-b file     检测文件是否是块设备文件,如果是,则返回 true。  [ -b $file ] 返回 false。
-c file     检测文件是否是字符设备文件,如果是,则返回 true。     [ -c $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。
常用的是-d,-f,-r,-w,-x,-e,-s

`#shell #!/bin/sh file="screencap" if [ -e $file ];then echo "$file 存在" else echo "$file 不存在" mkdir -p $file fi if [ -d $file ];then echo "$file 是目录" else echo "$file 不是目录" fi if [ -f $file ];then echo "$file 是文件" else echo "$file 不是文件" touch land.txt fi ls > land.txt file2="land.txt" if [ -r $file2 ];then echo "$file2 可读" else echo "$file2 不可读" fi if [ -w $file ];then echo "$file2 可写" else echo "$file2 不可写" fi if [ -x $file2 ];then echo "$file2 可执行" else echo "$file2 不可执行" fi if [ -s $file2 ];then echo "$file2 长度为0" else echo "$file2 长度不为0" fi if [ $file2 ];then echo "$file2 存在" else echo "$file2 不存在" fi

screencap 存在

screencap 是目录

screencap 不是文件

land.txt 可读

land.txt 可写

land.txt 不可执行

land.txt 长度为0

land.txt 存在`

原文地址:https://www.cnblogs.com/csj2018/p/9555911.html

时间: 2024-11-05 11:52:11

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

第三章 shell编程之运算符

shell编程之运算符 一 shell变量的缺点 弱类型: 默认字符串型: 二 declare声明变量类型 格式:declare [+/-][选项] 变量名 -:给变量设定类型属性: +:取消变量的类型属性: -a:将变量声明为数组型:

shell的替换运算符和模式匹配运算符

shell 的替换运算符和模式匹配运算符 替换运算符: (1) ${varname:-word}       :如果varname存在且非null,则返回其值:否则,返回word. (2) ${varname:=word}      :如果varname存在且非null, 则返回其值,否则,设置其为word并返回. (3) ${varname:?message} :如果varname存在且非null,则返回其值,否则,返回 varname:message,并退出当前的命令或脚本.省略messag

linux shell &ldquo;(())&rdquo; 双括号运算符使用

linux shell "(())" 双括号运算符使用 在刚开始学习inux shell脚本编程时候,对于它的 四则运算以及逻辑运算.估计很多朋友都感觉比较难以接受.特变逻辑运算符"[]"使用时候,必须保证运算符与算数 之间有空格. 四则运算也只能借助:let,expr等命令完成. 今天讲的双括号"(())"结构语句,就是对shell中算数及赋值运算的扩展.   使用方法: 语法: ((表达式1,表达式2-)) 特点: 1.在双括号结构中,所有表

Shell 表达式与运算符

防伪码:起床望明月,低头思故乡. 3 3 .1  条件表达式 表达式 实例 [ expression ]  [ 1 -eq 1 ] [[ expression ]]  [[ 1 -eq 1 ]] test expression  test 1 -eq 1 ,等同于[] 3 3 .2  整数比较符 比较符 描述 示例 -eq,equal 等于  [ 1 -eq 1 ]为 true -ne,not equal 不等于 [ 1 -ne 1 ]为 false -gt,greater than  大于 [

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

导读 在刚开始学习inux shell脚本编程时候,对于它的 四则运算以及逻辑运算.估计很多朋友都感觉比较难以接受.特变逻辑运算符"[]"使用时候,必须保证运算符与算数 之间有空格. 四则运算也只能借助:let,expr等命令完成. 今天讲的双括号"(())"结构语句,就是对shell中算数及赋值运算的扩展. 使用方法: 语法: ((表达式1,表达式2-)) 特点: 1.在双括号结构中,所有表达式可以像c语言一样,如:a++,b--等. 2.在双括号结构中,所有变量

Shell编程 之 运算符

1. Shell变量的弱点:弱类型 和 默认字符串类型 2. declare 命令 2.1 declare 声明变量类型       declare  [+/-]  [选项]  变量名 2.1.1 声明数值类型变量:declare  -i  c=$a+$b  # a和b之前不声明也可以 2.1.2 声明数组变量: 2.1.3 声明环境变量:declare  -x  a=123  # 和export作用相似,但其实都是declare命令的作用 2.1.4 声明变量只读属性:declare  -r

第三章 Shell表达式与运算符

2.1 条件表达式 表达式 示例 [ expression ] [ 1 -eq 1 ]  [[ expression ]] [[ 1 -eq 1 ]] test expression test 1 -eq 1 ,等同于[] 2.2 整数比较符 比较符 描述 示例 -eq,equal 等于 [ 1 -eq 1 ]为true -ne,not equal 不等于 [ 1 -ne 1 ]为false -gt,greater than 大于 [ 2 -gt 1 ]为true -lt,lesser than

shell条件测试,运算符,选择结构,for循环结构

一.shell条件测试      man bash  //查看帮助 条件测试的命令 test 选项 文件名或目录名 或 [ 选项 文件名或目录名 ] 例: [ -e /etc/passd ] 文件状态 -f              //判断是不是文件,是文件为真 -d //判断是不是目录,是目录为真 -e //判断是不是存在,存在为真 -r //判断是否可以阅读,可以阅读为真 -w //判断是否可写,可写为真 -x //判断是否可执行,可执行为真 -l //判断是否为链接,是链接为真 数值比较

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

注意事项: (1)bash不支持简单的数学运算,但是可以通过其他命令来实现,例如 awk 和 expr,expr 最常用: (2)完整的表达式要被 ` ` 包含,注意这个字符不是常用的单引号,在 Esc 键下边. (3)条件表达式要放在方括号之间,变量与符号之间必须以空格隔开,命令才可以识别: (4)乘号(*)在shell中有特殊含义,作为乘法符号时,要在*前边必须加反斜杠(\)才能实现乘法运算: (5)关系运算符采用的是英文字母的缩写,等于(-eq,equal),不等于(-ne,not equ