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) 收藏 举报
浙公网安备 33010602011771号