shell系列-shell第十一讲

今天和大家分享一下shell系列-shell第十一讲内容!希望对大家有所帮助!

1、条件表达式
1.1、[ expression ] 用法
[ expression ]是用来做判断的字符。比如:
bash [root@master1 ~]#[ 1 -eq 1 ] [root@master1 ~]#echo $? 0
这里的-eq就相当于我们数学上的等于号,那么我们这里的[ 1 -eq 1 ]表示1是否等于1,我们使用中括号做一个判断,1确实等于1,此时条件为真,命令执行成功,返回值为0。
或者我们可以使用的高级一点:
bash [root@master1 ~]#[ 1 -eq 1 ] && echo "yes,1 确实等于1" || echo "no ,两者不相等" yes,1 确实等于1 [root@master1 ~]#[ 1 -eq 2 ] && echo "yes,1 确实等于1" || echo "no ,两者不相等" no ,两者不相等
1.2、[[ expression ]]用法
两个双括号是我们的bash shell的内置功能,一般情况下[ ]和[[ ]]用法是一样的,比如:
bash [root@master1 ~]#[[ 1 -eq 1 ]] && echo "yes,1 确实等于1" || echo "no ,两者不相等" yes,1 确实等于1
都可以来做判断。大多数情况下都是一样的效果。不过两者也有一些区别。
2、[ ]和[[ ]]的区别
其实很多人对这两种用法上都会感到很大的疑惑,不知道什么时候用哪个,在此我总结了一下,
bash [root@master1 ~]#cat a.sh !/bin/bash NAME="aaa bbb" if [ "$NAME" == "aaa bbb" ] then echo "yes. 相等" else echo "no, 不相等" fi [root@master1 ~]#bash a.sh yes. 相等
写一个shell脚本,然后使用[ ]来进行比对。然后发现两者是相等的。没有问题。
现在我们使用[[ ]]来试试。
bash [root@master1 ~]#cat a.sh !/bin/bash NAME="aaa bbb" if [[ "$NAME" == "aaa bbb" ]] # 注意我这里改成了两个括号 then echo "yes. 相等" else echo "no, 不相等" fi [root@master1 ~]#bash a.sh yes. 相等 [root@master1 ~]#
使用[[ ]]发现同样的结果,没有区别。
现在我们对引用的变量不加双引号,且使用单括号看看。
bash [root@master1 ~]#cat a.sh !/bin/bash NAME="aaa bbb" if [ $NAME == "aaa bbb" ] # 这里发生了改变,没有引号,且为单括号 then echo "yes. 相等" else echo "no, 不相等" fi [root@master1 ~]#bash a.sh a.sh: 第 4 行:[: 参数太多 no, 不相等
直接报了一个错误给我们,然后还返回的是错误的结果,两个字符串明明是一样的。看来在单括号情况下必须加上双引号才行。
然后我们现在不加双引号,且使用双括号来看看
bash [root@master1 ~]#cat a.sh !/bin/bash NAME="aaa bbb" if [[ $NAME == "aaa bbb" ]] then echo "yes. 相等" else echo "no, 不相等" fi [root@master1 ~]#bash a.sh yes. 相等
发现没有报错,这就是使用双括号的好处,因为很多人不喜欢引用变量的时候还加上双引号,他们往往只写引用变量的写法,这就导致程序经常出错的问题。
总结:当使用引用变量名这种机制时,[ ]和[[ ]]是有区别的,使用[ ]时需要在变量的外侧加上双引号,而使用[[ ]]时则不用这么来写。
3、test命令检测
test命令的功能和[ ]是一模一样的,在[ ]中需要注意的点,在test命令中同样需要注意。
test的用法是:
bash [root@master1 ~]#test 1 -eq 1 [root@master1 ~]#echo $? 0 [root@master1 ~]#test 1 -eq 2 [root@master1 ~]#echo $? #得出错误的结果。 1

声明:文章来源于网络,如有侵权请联系删除!

相关新闻

历经多年发展,已成为国内好评如潮的Linux云计算运维、SRE、Devops、网络安全、云原生、Go、Python开发专业人才培训机构!