shell条件语句

一.文本条件测试

1.测试语法格式

测试表达式是否成立,若成立返回0,否则返回其他数值。

方法一:test 条件表达式

方法二:[条件表达式]

  • 操作符

    -d:测试是否为目录(Directory)
    -e:测试目录或文件是否存在(Exist)
    -a:测试目录或文件是否存在(Exist)
    -f:测试是否为文件(File)
    -r:测试当前用户是否有权限读取(Read)
    -w:测试当前用户是否有权限写入(Write)
    -x:测试当前用户是否有权限执行(eXcute)
    -L: 测试是否为软连接文件
    
  • 属性测试

    -s FILE #是否存在且非空
    -t fd #fd 文件描述符是否在某终端已经打开
    -N FILE #文件自从上一次被读取之后是否被修改过
    -O FILE #当前有效用户是否为文件属主
    -G FILE #当前有效用户是否为文件属组
    
  • 示例

    [root@test1 ~]# test -d /etc/sysconfig
    [root@test1 ~]# echo $?
    0
    [root@test1 ~]# test -f /etc/sysconfig
    [root@test1 ~]# echo $?
    1
    [root@test1 ~]# [ -d /etc/sysconfig/ ]            注意前后空格
    [root@test1 ~]# echo $?
    0
    [root@test1 ~]# [ -f /etc/sysconfig/ ]
    [root@test1 ~]# echo $?
    1
    [root@localhost ~]# test -e qiuhe.sh &&echo "yes"
    yes
    &&表示且的意思 前面的表达式成立才会输出yes
    
    [root@localhost ~]#ll /etc/shadow
    ---------- 1 root root 1549 1019 10:58 /etc/shadow
    [root@localhost ~]#[ -r /etc/shadow ]
    [root@localhost ~]#echo $?
    0
    #实际效果,不是表面显示,注意root权限
    [root@localhost ~]#[ -x /etc/shadow ]
    [root@localhost ~]#echo $?
    1
    #root执行权限别人没有root也没有,别人有root也有
    
    ###a 和 e  的区别 
    [root@localhost ~]#[ ! -e /etc/shadow ]
    [root@localhost ~]#echo $?
    1
    [root@localhost ~]#[ ! -a /etc/shadow ]
    [root@localhost ~]#echo $?
    0
    ##建议使用e选项
    

2.比较整数数值

[ 整数1 操作符 整数2 ] 公式

- -eq:第一个数等于(Equal)第二个数
- -ne:第一个数不等于(Not Equal)第二个数
- -gt:第一个数大于(Greater Than)第二个数
- -lt:第一个数小于(Lesser Than)第二个数
- -le:第一个数小于或等于(Lesser or Equal)第二个数
- -ge:第一个数大于或等于(Greater or Equal)第二个数

3.字符串比较

  • 常用的测试操作符

    - =:字符串内容相同
    - !=:字符串内容不同,! 号表示相反的意思
    - -z:字符串内容为空
    - -n: 字符是否存在
    
  • 格式

    [  字符串1  =  字符串2 ]  是否相同
    
    [  字符串1  !=  字符串2 ]  是否不相同
    
    [  -z  字符串 ]   是否为空
    
    [  -n  字符串 ] 字符是否存在
    

4.逻辑测试(短路运算)

格式1:[ 表达式1 ] 操作符 [ 表达式2 ] …
格式2:命令1 操作符 命令2 …

常见条件

- -a或&&:逻辑与,“而且”的意思全真才为真
- -o或||:逻辑或,“或者”的意思一真即为真
- !:逻辑否
  • 短路与&&

    CMD1 短路与 CMD2
    全真才为真
    
    第一个CMD1结果为真 ,第二个CMD2必须要参与运算,才能得到最终的结果 
    第一个CMD1结果为假 ,总的结果必定为假,因此不需要执行CMD2
    
  • 短路或||

    CMD1 短路或 CMD2
    一真即为真
    
    第一个CMD1结果为真 (1),总的结果必定为1,因此不需要执行CMD2
    第一个CMD1结果为假 (0),第二个CMD2 必须要参与运算,才能得到最终的结果
    

二.if语句

1.单分支结构

img

单分支

if 判断条件;

then   条件为真的分支代码

fi

2.双分支结构

在这里插入图片描述

双分支

if 判断条件; then
 条件为真的分支代码

else
 条件为假的分支代码

fi

3.多分支结构

查看源图像

多分支

if 判断条件1; then
 条件1为真的分支代码

elif 判断条件2; then
 条件2为真的分支代码

elif 判断条件3; then
 条件3为真的分支代码

...
else
 以上条件都为假的分支代码

fi

三.case语句

1.case多分支

case 变量 in
模式1)
    命令序列1
;;
模式2)
    序列序列2
;;
.......
*)
    默认命令序列
esac

在这里插入图片描述

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值