[[ ... ]] 和 [ ... ] 的区别汇总: 1. 所有的字符与逻辑运算符直接用“空格”分开,不能连在一起[ 条件判断 ] 2.[[ ... ]] 运算符能够支持 * , < , > 等符号,且不需要转义符;而[ ... ] 则需要加转义符\ 3. 进行逻辑运算符&& 、 || 比较时,如果用的 [ ] 符号,则用在外面,如[ ] && [ ] || [ ] ;如果在[ ... ]里面进行逻辑与或的比较,则用 -a 、-o 进行表示,如 [ x = y -a x < z -o x > m ] 4. [[ ... ]] 运算符是 [ ... ] 运算符的扩充;能够支持<、>符号运算不需要转义符;里面仅支持 &&、|| ,不能使用 -a 、-o 5. [[ ... ]] 用 &&而不是-a表示逻辑“与”;用||而不是-o表示逻辑“或” 6. [[ ... ]]可以进行算数扩展,而 [ ... ] 不可以 7. [[ ... ]]支持正则,而 [ ... ] 不支持 8. 双括号(( )) 可以用于数学表达式 9. 双括号[[ ... ]]用于高级字符串处理,比如“模糊匹配”
root用户登录系统,执行以下脚本
#!/bin/bash if [ $UID -gt 199 ] && [ `/usr/bin/id -gn` = `/usr/bin/id -un` ];then echo 'UID大于199,且组名和用户名相同' elif [ $UID -eq 0 ];then echo "当前用户ID:$UID 用户名为:`/usr/bin/id -un`" else echo "以上都不满足" fi执行结果:
对比 [[ ... ]] 运算符和 [ ... ] 运算符
[root@localhost ~]# if [[ $USER == r* ]];then echo "hello,$USER"; else echo " $USER not root";fi hello,root [root@localhost ~]# if [ $USER == r* ];then echo "hello,$USER"; else echo " $USER not root";fi root not root [root@localhost ~]# [root@localhost ~]# if [[ $USER == [a-z]oot ]];then echo "hello,$USER"; else echo " $USER not root";fi hello,root [root@localhost ~]# if [ $USER == [a-z]oot ];then echo "hello,$USER"; else echo " $USER not root";fi root not root [root@localhost ~]#由上述结果可以看出, [[ ... ]] 下可以把*识别成通配符,而[ ... ]下,*只能被识别成一个字符串;且前者可以用正则