流程控制过程中复杂条件和通配符

判断第一种:两个条件都为真或有一个为真就执行

if [ 条件判断一 ] && (||) [ 条件判断二 ]; then   
   命令一
elif [ 条件判断三 ] && (||) [ 条件判断四 ]; then
    命令二               
else
    执行其它
fi

判断第二种

if [条件判断一 -a (-o) 条件判断二 -a (-o) 条件判断三]; then
elif [条件判断三  -a (-o) 条件判断四 ]; then
else
   执行其它
fi

判断第三种

if [[条件判断一 && (||) 条件判断二 ]]; then
elif [[ 条件判断三 && (||) 条件判断四 ]]; then
else
   执行其它
fi

 

例1:设置umask

参考: [root@xuegod63 ~]# vim /etc/profile 

image.png

[root@xuegod63 ~]# vim  umask.sh

if [ $UID -gt 199 ] && [ "`/usr/bin/id -gn`" = "`/usr/bin/id -un`" ]; then

    echo "umask 002"

else

    echo "i am root :umask 022"

fi

[root@xuegod63 ~]# bash umask.sh

i am root :umask 022

 

例2:[[…]]和[…]的区别

[[… ]] 运算符是[… ]运算符的扩充;[[…]]能够支持 *,< 、>等符号且不需要转义符

例1:

[root@xuegod63 ~]# if [[ $USER == r* ]] ; then echo "hello,$USER" ; else echo $USER not ; fi 

hello,root

注: $USER == r*对比时,  r* 表示以r开头的任意长度字符串,这样就包括root

当只有一个[] 方括号时:

[root@xuegod63 ~]# if [ $USER == r* ] ; then echo "hello,$USER" ; else echo $USER not ; fi

root not

#对比时r* ,就表示两个字符串 r*

也可以这样写:

[root@xuegod63 ~]# if [[ $USER == [a-z]oot ]] ; then echo "hello,$USER" ; else echo $USER not ; fi

[[…]]和[…]的区别汇总:

1、所有的字符与逻辑运算符直接用“空格”分开,不能连到一起。

2、在[…]表达式中,常见的><需要加转义符\,大小比较

3、进行逻辑运算符&& ||比较时;如果用的[ ]符号,则用在外面,如[… ] && [… ] || [ …]如果在[…]里面进行逻辑与或的比较,则用-a、-o进行表示,如[ x = y –a x < z –o x > m ]

4、[[… ]] 运算符只是[… ]运算符的扩充;能够支持<>符号运算不需要转义符;它还是以字符串比较大小。里面支持逻辑运算符 || && , 不再使用-a -o

5、[[…]]&& 而不是 -a 表示逻辑“与”;用 || 而不是 -o表示逻辑“或”

6、[[… ]]可以进行算术扩展,而[ ... ]不可以

7、[[...]]能用正则,而[...]不行

8、双括号((  ))用于数学表达式

9、双方括号号[[  ]]用于高级字符串处理,比如“模糊匹配”

版权声明:
作者:WaterBear
链接:https://l-t.top/1600.html
来源:雷霆运维
文章版权归作者所有,未经允许请勿转载。

THE END
分享
二维码
< <上一篇
下一篇>>