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

最新文章

  1. Server Tomcat v7.0 Server at localhost was unable to start within 45 seconds
  2. Java虚拟机各内存区域的位置及功能的介绍
  3. MySQL5.7重置root密码
  4. 浅谈objective—C管理内存
  5. 说点手动导jar包的细节Referenced Libraries
  6. oracle事务特性详解
  7. AngularJs练习Demo17 ngRoute
  8. Linux定时任务Crontab命令详解
  9. knockout笔记
  10. linux上发布网站遇到的问题
  11. JAVA基础---面向对象
  12. RandomAccessFile多线程下载、复制文件、超大文件读写
  13. 前端构建之gulp与常用插件(转载)
  14. Hadoop-HA机制工作原理
  15. Angular ui-roter 和AngularJS 通过 ocLazyLoad 实现动态(懒)加载模块和依赖
  16. C# 创建EXCEL图表并保存为图片
  17. CentOS Yum 源搭建
  18. 从fasta中提取或者过滤掉多个序列
  19. output.php
  20. 自动布局又出问题-HPPGCTableViewCell

热门文章

  1. Cesium之影像底图加载
  2. 地理探测器简介(R语言)
  3. vitis笔记1
  4. Jmeter 如何把 时间戳 转为 本地时间
  5. 图论专题 - LibreOJ
  6. leetcode刷题(三)
  7. 炫酷 css实现水波纹
  8. pgsql判断字符串是否为数字
  9. sql server 最近执行语句统计查询分析
  10. react框架-知识点(ref,, setState)