【Shell教程】三----运算符,条件判断

文章目录

    • 算数运算符
    • 关系运算符
    • 逻辑运算符
    • 字符串运算符
    • 文件测试运算符
      • 文件权限判断
      • 文件类型判断

算数运算符

Shell支持多种运算符
基本语法:
可以用

“$((运算式))”
或
“$[运算式]

来进行加减乘除计算

echo "$[2+2]"

echo "$((2+2))"

输出:
在这里插入图片描述

来进行运算式计算

或者使用expr命令

ecpr 2 + 2

在这里插入图片描述
注意:

  • 表达式和运算符之间要有空格, 2+2 是不对的,必须写成 2 + 2,
  • 完整的表达式要被 ` `反引号 括住

例: 计算(2+3)X4的值

expr `expr 2 + 3` \* 4

输出:
在这里插入图片描述

例: 计算2+2的值

#!/bin/bash

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

输出: 两数之和为 : 4

运算符 说明 举例
+ 加法 expr $a + $b` 结果为 30
- 减法 `expr $a - $b` 结果为 -10
* 乘法 `expr $a * $b` 结果为 200
/ 除法 `expr $b / $a` 结果为 2
% 取余 `expr $b % $a` 结果为 0
= 赋值 a=$b 把变量 b 的值赋给 a
= 赋值 a=$b 把变量 b 的值赋给 a
== 相等,用于比较两个数字,相同则返回 true [ $a == $b ] 必须要有空格!
!= 不相等,用于比较两个数字,不相同则返回 true [ $a != $b ]

注意: 在乘法中,系统默认号问一个符号,而不是乘号,所以需要使用转义符号 \ 来帮助系统识别这里是一个乘号
格式 a \
b

测试:


#!/bin/bash


a=10
b=20

result=`expr $a + $b`
echo "a + b = $result"

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

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

result=`expr $b / $a`
echo "b / a = $result"

result=`expr $b % $a`
echo "b % a = $result"

输出:
【Shell教程】三----运算符,条件判断_第1张图片

关系运算符

运算符 说明 举例
-eq == equal的缩写,相等 [ $a -eq $b ]
-ne != not equal的缩写,不相等 [ $a -nq $b ]
-gt > greater thanl的缩写,大于,如果左边大于右边,返回true,否则返回false [ $a -gt $b ]
-lt < little thanl的缩写,小于,如果左边小于右边,返回true,否则返回false [ $a -lt $b ]
-ge >= 大于等于,如果左边大于等于右边,返回true,否则返回false [ $a -ge $b ]
-le <= 小于等于,如果左边小于等于右边,返回true,否则返回false [ $a -le $b ]

注意:

  • 注意两侧留空格,[ a = = a== a==b] 是错误的,必须写成 [ $a == $b ]
  • 只支持整数比较 shell中定义整数: declare -i xxx
#!/bin/bash

a=20
b=10

if [ $a -eq $b ]
then
	echo "eq 关系运算结果: a等于b"
else
	echo "eq 关系运算结果: a不等于b"
fi


if [ $a -ne $b ]
then 
	echo "ne 关系运算结果: a不等于b"
else
	echo "ne 关系运算结果: a等于b"
fi


if [ $a -gt $b ]
then
	echo "gt 关系运算结果: a大于b"
else
	echo "gt 关系运算结果: a小于等于b"
fi


if [ $a -lt $b ]
then
	echo "lt 关系运算结果:a小于b"
else
	echo "lt 关系运算结果:a大于等于b"
fi


if [ $a -ge $b ]
then
	echo "ge 关系运算结果:a大于等于b"
else
	echo "ge 关系运算结果:a小于b"
fi


if [ $a -le $b ]
then
	echo "le 关系运算结果:a小于等于b"
else 
	echo "le 关系运算结果:a大于b"
fi

输出:
【Shell教程】三----运算符,条件判断_第2张图片

逻辑运算符

运算符 说明 举例
-a && 与运算,两个表达式都为true,才返回true [ $a -a $b ]
-o || 或运算,有一个表达式都为true,则返回true [ $a -o $b ]
! ! 非运算,表达式为true,则返回false 为false ,则返回true [ ! $a ]

如果是两个[[ ]] 括起来,则可以使用&& 和||
也就是:

  • [ ]中用 -a,-o, !
  • [[ ]]中用 &&,||, !

测试:

#!/bin/bash


a=20
b=10
c=10

if [ $a = $b -a $b = $c ]
then
   echo "a,b,c 相等"
else
   echo "a,b,c 不相等"
fi
if [ $a = $b -o $b = $c ]
then
   echo "a等于b 或 b等于c "
else
   echo "a,b,c 不相等"
fi

输出:

在这里插入图片描述

测试:


#!/bin/bash


a=20
b=10
c=10

if [[ $a = $b && $b = $c ]]
then
   echo "a,b,c 相等"
else
   echo "a,b,c 不相等"
fi

if [[ $a = $b || $b = $c ]]
then
   echo "a等于b 或 b等于c "
else
   echo "a,b,c 不相等"
fi

输出:

在这里插入图片描述

字符串运算符

运算符 说明 举例
= 检测两个字符串是否相等,相等返回 true [ $a = $b ]
!= 检测两个字符串是否不相等,不相等返回 true [ $a != $b ]
-z 检测字符串长度是否为0,为0返回 true [ -z $a ]
-n 检测字符串长度是否空字符串,不是空字符串返回 true [ -n “$a” ]

文件测试运算符

文件权限判断

运算符 说明 举例
-r read 文件是否可读 如果是,则返回true [ -r $file ]
-w 检测文件是否可写,如果是,则返回true [ -w $file ]
-x 检测文件是否有执行的权限,如果有,则返回true [ -x $file ]

测试:

#!/bin/bash

if [ -r hello.c ]
then
	echo "当前用户可读此文件"
else
	echo "当前用户没有读此文件的权限"
fi

if [ -w hello.c ]
then
	echo "当前用户可写此文件"
else 
	echo "当前用户没有写此文件的权限"
fi

if [ -x hello.c ]
then
	echo "当前用户可以执行此文件"
else
	echo "当前用户没有执行此文件的权限"
fi

输出:
在这里插入图片描述
测试:

文件类型判断

运算符 说明 举例
-e 检测文件(包括目录)是否存在,如果是,则返回 true [ -e $file ]
-s 检测文件是否为空,不为空返回 true [ -s $file ]
-d 检测文件是否是目录,如果是,则返回 true [ -d $file ]
-f 检测文件是否是存在且为普通文件(既不是目录,也不是设备文件),如果是,则返回 true [ -f $file ]
#!/bin/bash

if [ -e hello.c ]
then
	echo "文件已经存在"
else
	echo "文件不存在"
fi

if [ -s hello.c ]
then
	echo "此文件大小不为0"
else
	echo "此文件大小为0,即文件内容为空"
fi
if [ -d hello.c ]
then
	echo "是目录"
else	
	echo "不是目录"
fi

if [ -f hello.c ]
then
	echo "该文件是普通文件"
else
	echo "该文件不是普通文件"
fi

输出:

在这里插入图片描述
【Shell教程】三----运算符,条件判断_第3张图片
请添加图片描述

你可能感兴趣的:(Shell,bash,开发语言,linux,shell,powershell)