zl程序教程

您现在的位置是:首页 >  其他

当前栏目

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

教程shell 判断 ---- 条件 运算符
2023-09-11 14:21:44 时间

算数运算符

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"

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

关系运算符

运算符说明举例
-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

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

逻辑运算符

运算符说明举例
-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” ]

文件测试运算符

文件权限判断

运算符说明举例
-rread 文件是否可读 如果是,则返回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

输出:

在这里插入图片描述
请添加图片描述
请添加图片描述