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