Shell编程之条件语句

目录

一、条件测试

1.文件测试

2.整数测试(数值比较)

3.字符串测试(字符串比较)

4.逻辑测试

二、if语句

1.if语句的结构

2.单分支if语句 

3.双分支if语句

4.多分支if语句

5.嵌套if语句

三、case分支语句 


一、条件测试

1.文件测试

要使Shell脚本程序具备一定的“智能”,面临的第一个问题就是如何区分不同的情况以确定执行何种操作

Shell环境根据命令执行后的返回状态值($?)来判断是否执行成功,当返回值为0时表示成功,否则(非0值)表示失败或异常

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

格式1:test 条件表达式
格式2:[ 条件表达式 ]       #注意中括号和表达式中间需要隔一个空格

格式3:[[ 条件表达式 ]]

常用的测试操作符功能
-d测试是否为目录(Directory)
-e测试目录或文件是否存在(Exist)
-f测试是否为文件(File)
-r测试当前用户是否有权限读取(Read)
-w测试当前用户是否有权限写入(Write)
-x测试是否设置有可执行(Excute)权限
-b测试是否为设备文件
-c测试是否为字符设备文件
-s测试存在且文件大小为空
-L测试是否为链接文件

2.整数测试(数值比较)

整数值比较指的是根据给定的两个整数值,判断第一个数与第二个数的关系,如是否大于、等于、小于第二个数

常用测试操作符含义
-eq等于
-ne不等于
-gt大于
-lt小于
-ge大于或等于
-le小于或等于

3.字符串测试(字符串比较)

字符串比较通常用来检查用户输入、系统环境等是否满足条件,在提供交互式操作的Shell脚本中,也可用来判断用户输入的位置参数是否符合要求。字符串比较的常用操作选项如下:

操作选项含义
=第一个字符串与第二个字符串相同
!=第一个字符串与第二个字符串不相同,其中“!”符号表示取反
-z检查字符串是否为空(Zero),对于未定义或赋予空值的变量将视为空串

格式1:[ 字符串1 = 字符串2 ]
             [ 字符串1 != 字符串2 ]
格式2:[-z 字符串]

4.逻辑测试

逻辑测试指的是判断两个或多个条件之间的依赖关系。当系统任务取决于多个不同的条件时,根据这些条件是否同时成立或者只要有其中一个成立等情况,需要有一个测试的过程   

常用的逻辑测试操作如下,使用时放在不同的测试语句或命令之间

&&逻辑与,表示“而且”,只有当前后两个条件都成立时,整个测试命令的返回值才为0
||逻辑或,表示“或者”,只要前后两个条件中有一个成立,整个测试命令的返回值即为0
!

逻辑否,表示“不”,只有当指定的条件不成立时,整个测试命令的返回值才为0

二、if语句

1.if语句的结构

单个括号([ ]):必须要有空格两个字符或数字之间的比较左右必须有空格
(1)条件判断:test一种形式,[ ]中间只能使用 = 和!= 比较字符串 ,如果使用 < 、>需要进行转义\

(2)然后中间如果比较数字要用 -lt 等符号, 不能使用\<比较数字,他会当成字符串处理
两个括号([[ ]]):可用于处理逻辑命令,也可以处理字符串是否相等,且使用 < 、>不用转义符

2.单分支if语句 

单分支 if 语句:对于单分支的选择结构,只有在“条件成立”时才会执行相应的代码,否则不执行任何操作

语法格式:

if [ condition ]; then
    # 如果 condition 为 true,则执行这里的代码块
    statement
fi

3.双分支if语句

双分支 if 语句只是在单分支的基础上针对“条件不成立”的情况执行另一种操作,而不是 “坐视不管”地不执行任何操作

语法格式:

if [ condition ]; then
    # 如果 condition 为 true,则执行这里的代码块
    statement1
else
    # 如果 condition 不为 true,则执行这里的代码块
    statement2
fi

4.多分支if语句

与单分支、双分支 if 语句相比,多分支 if 语句的结构能够根据多个互斥的条件分别执行不同的操作

语法结构:

if [ condition1 ]; then
    # 如果 condition1 为 true,则执行这里的代码块
    statement1
elif [ condition2 ]; then
    # 如果 condition1 不满足且 condition2 为 true,则执行这里的代码块
    statement2
elif [ condition3 ]; then
    # 如果 condition1 和 condition2 都不满足且 condition3 为 true,则执行这里的代码块
    statement3
else
    # 如果上述所有条件都不满足,则执行这里的代码块
    default_statement
fi

5.嵌套if语句

语法结构:

if [ condition1 ]; then
    # 如果 condition1 为 true,则执行这里的代码块
    if [ condition2 ]; then
        # 如果 condition2 也为 true,则执行这里的代码块
        statement1
    else
        # 如果 condition2 不为 true,则执行这里的代码块
        statement2
    fi
else
    # 如果 condition1 不为 true,则执行这里的代码块
    statement3
fi

三、case分支语句 

case语句可以使脚本程序的结构更加清晰、层次分明,常用于服务的启动、重启、停止的脚本,有的服务不提供这种控制脚本,需要用case语句编写

case语句主要适用于以下情况:某个变量存在多种取值,需要对其中的每一种取值分别执行不同的命令序列。这种情况与多分支的if语句非常相似,只不过if语句需要判断多个不同的条件,而case语句只是判断一个变量的不同取值

语法格式:

case 值 in
    模式1)
        # 如果值匹配模式1,则执行这里的代码块
        command1
        ;;
    模式2)
        # 如果值匹配模式2,则执行这里的代码块
        command2
        ;;
    模式3|模式4)
        # 如果值匹配模式3或模式4,则执行这里的代码块
        command3
        ;;
    *)
        # 如果值与上述所有模式都不匹配,则执行默认代码块
        default_command
        ;;
esac

  • 27
    点赞
  • 10
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值