shell 之 流程控制过程中复杂条件

mac2024-03-30  42

1 语法格式

1.1 判断第一种

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

1.2 判断第二种

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

1.3 判断第三种

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

1.4 补充描述

[[ ... ]] 和 [ ... ] 的区别汇总:   1. 所有的字符与逻辑运算符直接用“空格”分开,不能连在一起[ 条件判断 ]   2.[[ ... ]] 运算符能够支持 * , < , > 等符号,且不需要转义符;而[ ... ] 则需要加转义符\   3. 进行逻辑运算符&& 、 || 比较时,如果用的 [ ] 符号,则用在外面,如[ ] && [ ] || [ ] ;如果在[ ... ]里面进行逻辑与或的比较,则用 -a 、-o 进行表示,如 [ x = y -a x < z -o x > m ]   4. [[ ... ]] 运算符是 [ ... ] 运算符的扩充;能够支持<、>符号运算不需要转义符;里面仅支持 &&、|| ,不能使用 -a 、-o   5. [[ ... ]] 用 &&而不是-a表示逻辑“与”;用||而不是-o表示逻辑“或”   6. [[ ... ]]可以进行算数扩展,而 [ ... ] 不可以   7. [[ ... ]]支持正则,而 [ ... ] 不支持   8. 双括号(( )) 可以用于数学表达式   9. 双括号[[ ... ]]用于高级字符串处理,比如“模糊匹配”

2 示例

例1

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

执行结果:

例2

对比 [[ ... ]] 运算符和 [ ... ] 运算符

[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 ~]#

由上述结果可以看出, [[ ... ]] 下可以把*识别成通配符,而[ ... ]下,*只能被识别成一个字符串;且前者可以用正则

最新回复(0)