shell脚本学习——4.算术运算符及条件判断

上一篇主要讲解完位置参数变量、预定义变量,涉及到的知识点有$n,$*,$@,$#,$$,$!,$?

本篇主要讲解算术运算符及条件判断

算术运算符

包含 + - * / %(取余)

使用方式有三种:

①$((运算式))

②$[运算式]

③expr `运算式`

这里的第三种方式不是单引号,而是我们之前介绍过的反引,在左上角的esc下面,数字1的左边,英文状态下输

#!/bin/bash
#使用三种方式计算5*(9-6)的结果
#第一种方式
echo $((5*(9-6)))

#第二种方式
echo $[5*(9-6)]

#第三种方式
Num=`expr 9 - 6`
echo `expr 5 \* $Num`

这里我们直观的看到第三种方式最麻烦,首先是不能直接一个表达式结束,其次这种方式的算术运算符左右必须得有空格最后如果是乘法还得写\进行转义 

保存退出后,授权,执行。

三个结果都为15,这里我就不贴图了。

条件判断

格式:

                       最简单版

if [条件] 

then 执行内容

fi

                       完整版

if [条件]

then 执行内容

elif [条件]

then 执行内容

else

执行内容

fi

 sh的条件语句的执行内容不能为空,fi为此流程控制结束

这里的条件,类似js的逻辑,如果你只写一个变量在里面,那么会判断这个变量是否有值,如果没有这个变量,或这个变量没值,或空值(空值包括 ""和" ")那么这个条件是不成立的。

但是我们用的更多的是进行逻辑判断参与的

比如我们可以使用 == 来判断等式两边是否相等

还是在/usr/local/shell目录下   vi condition.sh

#!/bin/bash
NUM1=5
NUM2=5
if [ $NUM1 == $NUM2 ]
then echo "数字相等"
fi

#-----------分割,上面判断数字,下面判断字符串
STR1="ss"
STR2="ss"
if [ $NUM1 == $NUM2 ]
then echo "字符串相等"
fi

注意:空格 ,中括号[]要用空格跟其他内容隔开, == 也要两边有空格 

授权,运行后

用于判断的运算符还有什么呢?

对数字进行判断
运算符 说明
-eq 判断是否相等,类似 ==
-ne 判断是否不相等,类似 !=
-gt 判断大于吗?类似>
-lt 判断小于吗?类似<
-ge 判断大于等于吗?类似>=
-le 判断小于等于吗?类似<=

 上面我们举了==的例子,这里又出现了 -eq也可以判断是否相等,那==和-eq有区别吗?有的,-eq只能判断数字,而==可以判断字符串,也可以判断数字

把刚才的condition.sh重新编辑一下,vi condition.sh


#!/bin/bash
#-----------数字关系判断------------
NUM1=10
NUM2=15
if [ $NUM1 -gt $NUM2 ]
then echo "Num1大于Num2"
elif [ $NUM1 -lt $NUM2 ]
then echo "Num1小于Num2"
else
echo "相等"
fi
#-----------------------另一种方式---------
echo "----------------分割线--------------------"
if [ [$NUM1>$NUM2] ]
then echo "Num1大于Num2哦哦"
elif [ [$NUM1<$NUM2] ]
then echo "Num1小于Num2哦哦"
else
echo "相等哦哦"
fi

上面用了两种方式实现判断NUM1跟NUM2的大小判断。

第二种方式使用 [ [] ]的方式,那这里面就可以写我们熟悉的><了

除了对数字的判断,sh还提供了对文件的判断,常用的有

按照文件权限进行判断
-r 有读的权限吗?
-w 有写的权限吗?
-x 有可执行的权限吗?
按照文件类型进行判断
-e 文件是否存在
-d 文件存在且是一个目录
-f 文件存在且是一个常规文件

我们再编辑一下condition.sh,

做一个判断,判断/root/demo.txt文件是否存在,如果存在,那么他有可读权限吗? 

#!/bin/bash
#----------判断文件-------------
if [ -e /root/demo.txt ]
then echo "文件存在"
     if [ -r /root/demo.txt ]
     then echo "有可读的权限"
     fi
else
echo "文件不存在"
fi

保存退出后,执行。执行第一次因为这个文件不存在,那么输出内容"文件不存在",然后我们创建该文件,再执行,可发现变化

 另外,sh还提供了case语法进行流程控制,类似Java的switch语法,判断某个变量匹配相等的值,语法结构:

case 变量 in

      "值1")

         执行语句

       ;;

      "值2")

         执行语句

        ;;

       ......(省略其他)

       "*")

             以上都不满足的执行语句

       ;;

esac

case的案例我就不再举例了。

最后出个练习试试手吧

练习

传入参数,给一个分数,如果这个分数在90分以上,输出优秀,70-90分,输出良好,50-70分,输出中等,30-50分,输出较差,30分以下,输出很差

猜你喜欢

转载自blog.csdn.net/chenjing928/article/details/86607194
今日推荐