if 条件语句

1. 概述

在shell的各种条件结构和流程控制结构中都要进行各种测试,然后根据测试结果执行不同的操作,有时候也会与 if 等条件语句相结合,来完成测试判断,以减少程序运行错误。

2. 文件测试
文件测试指的是根据给定的路径名称,判断对应的是文件还是目录,或
者判断文件是否存在,是否可读、可写、可执行等

文件测试操作符 说明
-d 测试是否为目录(Directory)
-e 测试目录或者文件是否存在(Exist)
-f 测试是否为文件(File)
-L 测试是否为链接文件
-b 测试是否为设备文件
-c 测试是否为字符设备文件
-r 测试当前用户是否有权读取
-w 测试当前用户是否有权写入
-x 测试是否设置有可执行权限
-s 测试存在且文件大小为空
-a、&& 逻辑与,且
-o 、|| 逻辑或,或
-n 测试是否为非空
-z 测试是否为空值

条件测试格式
条件测试语句 说明
test 测试表达式 利用test命令进行条件测试表达式的方法
[ 测试表达式 ] 通过[ ]进行条件测试表达式的方法,和test命 令用法相同
[[ 测试表达式 ]] 通过[[ ]]进行条件测试表达式的方法,比test和[ ]更新
(( 测试表达式 )) 通过(())进行条件测试表达式的方法,一般用于if语句里
注:(())不能用于文件测试,文件测试一般常用的是 []
不分主次,按顺序逐个判断,判断的是前面的结果

逻辑测试
&& 如果前面是正确的,执行
|| 如果前面是错误的,执行
; 挨个儿执行

[ -n str1 ] #检查str1的长度是否非0
[ -z str1 ] #检查str1的长度是否为0

3.整数值比较
整数值比较指的是根据给定的两个整数值,判断第一个数与第二 个数的关系,如是否大于、等于、小于第二个数实际应用非常广泛

参数 含义
-eq 第一个数等于第二个数
-ne 第一个数不等于第二个数
-gt 第一个数大于第二个数
-lt 第一个数小于第二个数
-le 第一个数小于或等于第二个数
-ge 第一个数大于或等于第二个数

4. if 条件语句

4.1 单分支

只有在“条件成立”时,才会执行相应的代码

if [条件判断];then
command
fi

#或

if [条件判断]
then
command
fi

4.2 多分支

嵌套使用,进行多次判断

if 条件测试操作
then
命令序列
elif 条件测试操作
then
命令序列
else
命令序列
fi

5.字符串比较

字符串比较
比较 说明
str1 = str2 检查str1是否和str2相同
str1 != str2 检查str1是否和str2不同
str1 < str2 检查str1是否比str2小
str1 > str2 检查str1是否比str2大
-n str1 检查str1的长度是否非0
-z str1 检查str1的长度是否为0

注意:

没有被定义的字符串长度默认为0

test比较字符串相等性时会将所有的标点和大写也考虑在内

字符串大小的比较遵循字典顺序,规则如下:

1.如果第一个字符串是第二个字符串的前缀,那么第一个小(比如a小于about)
2.从字符串的开头比较,按照字母顺序,a比b小(比如about小于ball)
3.如果第一个字符相同,再比较第二个(比如about小于above)

#!/bin/bash

val1=lookat
val2=look
#大于小于符号必须转义
#否则shell会把它们当作重定向
if [ $val1 \> $val2 ]
then
echo "$val1 is greater than $val2"
else
echo "$val1 is less than $val2"
fi

case 条件语句

case语句为多选择语句。可以用case语句匹配一个值与一个模式,如果匹配成功,执行相匹配的命令。
case需要一个esac(就是case反过来)作为结束标记,每个case分支用右圆括号,用两个分号表示break,其中“;;”不是跳出循环,是不在去匹配下面的模式

子句含右圆括号 " ) " 部分开始。
子句结束符号
" ;; " :’ 结束 ’ ,以两个分号结尾,表示只执行当前子句中的关联命令,相当于执行后直接 结束。
" ;;& " : ’ 继续匹配 ’ ,以两个分号与连字符结尾,表示当前子句的关联命令执行后,会继续去 匹配 后面子句,并执行关联的命令。
" ;& " : ’ 继续执行 ’ ,继续执行下个子句的关联命令,不论是否匹配。
case 语句 以 " case " 结束。
语法格式
case 变量值 in
分支1)
action1
;;
分支2)
action2
;;
*)
action3
esac

shell—if + case条件语句的更多相关文章

  1. shell脚本中的case条件语句介绍和使用案例

    #前言:这篇我们接着写shell的另外一个条件语句case,上篇讲解了if条件语句.case条件语句我们常用于实现系统服务启动脚本等场景,case条件语句也相当于if条件语句多分支结构,多个选择,ca ...

  2. Shell编程之条件语句:if、case语句

    Shell编程之条件语句:if.case语句               一.条件测试                1)test命令测试                2)整数值比较         ...

  3. 『忘了再学』Shell流程控制 — 35、多分支case条件语句

    目录 1.case条件语句介绍 2.case语句需要注意的内容 3.练习 示例1 示例2 1.case条件语句介绍 case语句和if-elif-else语句一样都是多分支条件语句,不过和if多分支条 ...

  4. 转 功能强大的shell:if条件语句

    原文 http://blog.zol.com.cn/2322/article_2321767.html 功能强大的shell:if条件语句 if语句测试条件,测试条件返回真(0)或假(1)后,可相应执 ...

  5. 02 shell编程之条件语句

    Shell编程之条件语句 学习目标: 掌握shell脚本条件测试 掌握if语句编程 目录结构: 条件测试 条件测试概述 l  对特定的条件进行判断,以决定如何执行操作 l  测试的方法 方法1:tes ...

  6. if语句 条件测试 shell编程之条件语句

    shell 编程之条件语句一.条件测试  ① test命令 测试  ② 文件测试  ③ 整数值比较  ④ 字符串比较  ⑤ 逻辑测试二.if语句的结构  单分支结构  双分支结构  多分支结构三.ca ...

  7. 关于Switch case条件语句中无break的用法

    关于Switch case条件语句的另类用法       今天在拜读一位前辈的程序时,遇到了这样一段程序: /***************************/ switch(operation ...

  8. JavaScript case 条件语句

    JavaScript case 条件语句 示例 switch(name){ case '1': age = 123; break; case '2' age = 456; break; default ...

  9. shell编程之条件语句

    目录: 一.条件测试 1.test命令测试 2.文件测试 3.字符串比较 4.逻辑测试 二.if语句 1.if单分支语句 2.if双分支语句 3.if多分支语句 三.case语句 case多分支语句 ...

  10. asp.net select Case条件语句的使用方法

    原文:http://www.111cn.net/net/vb-net/38548.htm 如果 testexpression 与任何 Case expressionlist 表达式匹配 ,则执行此 C ...

随机推荐

  1. 题解 P4163 [SCOI2007]排列

    强烈谴责只有 125MB 的行为,然后我没删调试是个什么 SB... 闲话少说,切入正题-- 首先看到取余和数字是可以排列的,我们自然而然的想到了数位 dp,但是很显然这题不是的数位 dp 通常解决的 ...

  2. 06#Web 实战:可滑动的标签页

    实现效果图 本随笔只是记录一下大概的实现思路,如果感兴趣的小伙伴可以通过代码和本随笔的说明去理解实现过程.我的 Gitee 和 GitHub 地址.注意哦:这个只是 PC 上的标签页,手机端的没用,因 ...

  3. 基于C++的OpenGL 10 之光照贴图

    1. 引言 本文基于C++语言,描述OpenGL的光照贴图 前置知识可参考: 基于C++的OpenGL 09 之材质 - 当时明月在曾照彩云归 - 博客园 (cnblogs.com) 笔者这里不过多描 ...

  4. PG数据库运维工具要覆盖哪些能力

    目前的国产数据库中,很多产品都是以PG社区版代码作为研发起点的,还有一些产品是基于openGauss开源项目的.这些数据库的基础特性都和社区版的PG数据库类似,不过也做了一定的拓展.不过从使用与运维上 ...

  5. Kotlin学习-基础知识点

    一:基础要点 //常量定义 valval arg_a1: Int = 1  //变量定义varvar arg_a2 = 5  // 系统自动推断变量类型为Int备注:kotlin 定义变量必须给定初始 ...

  6. [WPF]MVVM的数据绑定

    啥是MVVM? 我理解的MVVM是Model(数据),View(界面),ViewModel(数据与界面之间的桥梁)的缩写,是一种编程模式.前期需要多花一些时间去编辑绑定,在后期维护方便.只需要关注数据 ...

  7. ThreadLocal及常用场景

    ThreadLocal ThreadLocal是Java中的为解决多线程间数据隔离的解决方案,其底层依赖于Java的内存模型,依赖于当前执行线程的内存来完成对数据的存取操作. 一般在使用时,在对象中创 ...

  8. java学习日记20230227-java代码规范

    JAVA代码规范 类,方法的注释要使用javadoc来写 非javadoc的注释往往是给代码维护者看的,着重告诉读者为什么这么写,如何修改,注意什么问题等 使用tab操作,实现缩进,默认整体向右边移动 ...

  9. 并发JUC

    JUC初级 • 1.什么是 JUC • 2.Lock 接口 • 3.线程间通信 • 4.集合的线程安全 • 5.多线程锁 • 6.Callable 接口 • 7.JUC 三大辅助类: CountDow ...

  10. Ubuntu更换国内apt-get源

    更换方法: cp /etc/apt/sources.list /etc/apt/sources.list.bak sudo sed -i 's/archive.ubuntu.com/mirrors.u ...