一、问题
1.1、环境
电脑环境:Windows 10;
JDK环境: Jdk1.8;
Docker版本:Server Version: 19.03.3
1.2、问题
在Shell脚本语句中,我们肯定会遇到条件判断,那么shell的条件判断该如何编写呢?
二、解答
2.1、数值判断;
格式:
if ((条件1));then执行语句1elif ((条件2));then执行语句2else不满足条件fi
1、正确实例:
#!/bin/bashNUM=$1if (($NUM >10));thenecho "this number($NUM) is bigger than 10"elseecho "this number($NUM) is not bigger than 10"fi
正确实例截图:
2、错误实例
#!/bin/bashNUM=$1if [[ $NUM > 10 ]] ; thenecho "this number($NUM) is bigger than 10!"elseecho "this number($NUM) is smaller than 10!"fi
错误实例的截图:
我们得出了完全相反的结论,然而,根据常识,我们明显知道,9不可能大于10的;那么,问题出在哪里呢?原来,双方括号【[[ 条件 ]]】如果要比较大小,必须使用转义的大鱼号,小于号,等于号;如上图中,不能直接使用大于号,而应该讲大于号换成【-gtl】;并且,双中括号内侧必须两内侧边空格,否则会报错;但是,如果使用双小括号,就可以不用空格,更简单明了;
将上面的语句改成下面的样子即可:
关于小括号和中括号的用法,可以看下面的总结;
2.2、目录是否存在
目录的判断需要使用中括号,中括号里的逻辑运算符,可以总结如下:
-f:判断文件是否存在;-d:判断目录是否存在;-eq:等于,整数比较;-ne:不等于,整数比较;-lt:小于;-gt:大于;-le:小于或等于;-ge:大于或等于;-a:and,表示并的关系;-o:or,或者,表示并的关系;-z:空字符串;!:非;
实例:
如果目录不存在,则创建目录;
#!/bin/bash#create by tzc at -12-23 22:59:49if [ ! -d /tmp ];thenmkdir -p /tmpelseecho "this director is already exit!"fi
注意感叹号和-d之间有空格!!!
2.3、测试脚本是否正确
格式:
/bin/bash -n fileExist.sh
如果没有问题,则会没有任何提示:
如果有问题,则:
(我这里多打了一个中括号);但是,这个方法只能检查格式错误,不能检查其他的错误,立刻如,如果我把中括号那里换成了1,则不会报错;
2.4、分数判断实例:
#!/bin/bashSCORES=$1if [ -z $SCORES ];thenecho "Usage:{please input a number betweent 0 to 100}"exitfiif [[ $SCORES -gt 90 ]];thenecho "优秀";elif [[ $SCORES -gt 80 ]];thenecho "良好";elif [[ $SCORES -gt 60 ]];thenecho "及格";elseecho "不及格!"fi
截图:
2.5、注意
1、小括号可以使用>,<,=;并且括号内外可以没有空格;
2、中括号括号内侧必须要有空格;
3、中括号不可以使用<,>,=;而必须使用转义的逻辑判断条件;
4、赋值号前后不能有空格;
本篇说明内容完毕;
三、总结
欢迎关注我的
CSDN博客: /River_Continent
微信公众号:幕桥社区
知乎:张牧野, /people/zhang-mu-ye-37-76/activities
简书: /u/02c0096cbfd3