共计 1703 个字符,预计需要花费 5 分钟才能阅读完成。
今天和大家分享一下 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
声明:文章来源于网络,如有侵权请联系删除!