2018最新linux云计算集群架构师-第一阶段-Linux操作系统入门到精通-第20章-流程控制过程中复杂条件和通配符

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

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

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
vim /etc/profile

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

#运行
bash umask.sh 

#结果
i am root :umask 022 

实例2

[[ 。。。 ]]和[ 。。。]的区别

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

#例子1
if [[ $USER == r* ]] ; then echo "hello,$USER" ; else echo $USER not ; fi

#结果
hello,root

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

#例子2
#当只有一个[] 方括号时
if [ $USER == r* ] ; then echo "hello,$USER" ; else echo $USER not ; fi

#结果
root not

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

#也可以这样写
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、双方括号号[[  ]]用于高级字符串处理,比如“模糊匹配”

shell中常见的通配符

字符

含义

实例

*

匹配 0 或多个字符

a*b  a与b之间可以有任意长度的任意字符, 也可以一个也没有, 如aabcb, axyzb, a012b, ab。

?

匹配任意一个字符

a?b  a与b之间必须也只能有一个字符, 可以是任意字符, 如aab, abb, acb, a0b。

[list] 

匹配 list 中的任意单一字符

a[xyz]b   a与b之间必须也只能有一个字符, 但只能是 x 或 y 或 z, 如: axb, ayb, azb。

[!list] 

匹配 除list 中的任意单一字符

a[!0-9]b  a与b之间必须也只能有一个字符, 但不能是阿拉伯数字, 如axb, aab, a-b。

[c1-c2]

匹配 c1-c2 中的任意单一字符 如:[0-9] [a-z]

a[0-9]b  0与9之间必须也只能有一个字符 如a0b, a1b... a9b。

{string1,string2,...}

匹配 sring1 或 string2 (或更多)其一字符串

a{abc,xyz,123}b    a与b之间只能是abc或xyz或123这三个字符串之一。

实例

ls /etc/*.conf
ls /etc/???.conf

#输出
/etc/nfs.conf  /etc/sos.conf  /etc/yum.conf

touch  /opt/a{1,2,3}.txt
ls /opt/a[123].txt

#输出
/opt/a1.txt  /opt/a2.txt  /opt/a3.txt


ls /opt/a[1,2,3].txt
ls /opt/a[13].txt

#输出
/opt/a1.txt  /opt/a3.txt

  

 

posted on 2019-12-03 18:59  herisson_pan  阅读(9)  评论(0)    收藏  举报

导航