一、条件测试

shell 进行条件判断的两种方式

test

格式

test [操作符选项] 表达式

[ 操作符选项 表达式 ]  两边要有空格

测试特定的表达式是否成立,当条件成立,测试语句的返回值为0,否则为其他数值

boole true(真) false(假)

返回码 0 非0 linux系统 shell脚本

1 0 java C语言

文件测试

文件测试常见选项

常见的测试操作符 含义
-e 测试 指定的文件或者目录是否存在
-f 测试 指定的对象是否为文件;指定的文件是否存在
-d 测试 指定的对象是否为目录;指定的目录是否存在
-r 测试 当前用户是否有读权限
-w 测试 当前用户是否有写权限
-x 测试 当前用户是否有执行权限
-L 测试文件是否为符号链接(软链接文件)
[root@localhost ~]# test -d /root/;echo $?#测试是否为目录
0 #返回值0,表示存在

[ -f /opt/abc.txt ]

整数值比较

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

常见测试操作符:

操作符 含义
-eq 等于 ==
-gt 大于 />
-lt 小于 /<
-ge 大于等于
-le 小于等于
-ne 不等于 !=

实例

[root@localhost ww]# [ 10 -gt 20 ]
[root@localhost ww]# echo $?
1
[root@localhost ww]# a=10
[root@localhost ww]# b=20
[root@localhost ww]# [ $a -lt $b ]
[root@localhost ww]# echo $?
0

字符串比较

格式
[ 字符串1 = 字符串2 ] 或者 [ "字符串1" == "字符串2" ]#判断是否相等
[ "字符串1" != "字符串2" ] #判断是否不等
[ -z "字符串" ] -z:#判断字符串是否为空,或者 指定的变量是否为空值
[ -n "字符串" ] -n:#检查是否有字符串存在

实例

[root@localhost ww]# ww=ky18
[root@localhost ww]# [ -z $ww ]
[root@localhost ww]# echo $?
1
[root@localhost ww]# echo $name [root@localhost ww]# echo $?
0
[root@localhost ww]# [ -n "$name" ]
[root@localhost ww]# echo $?
1
#字符串判断记得加""

浮点数的运算

(有小数点的运算)

echo "浮点运算字符串" | bc

[root@localhost ww]# echo "2.2+3.4" | bc
5.6

awk 'BEGIN {print 浮点运算字符串}'

逻辑测试

格式:
[ 表达式1 ] 操作符 [ 表达式2 ]
命令1 操作符 命令2 [ 表达式1 ] && [ 表达式2 ] 等同于 [ 表达式1 -a 表达式2 ] [[ 表达式1 && 表达式2 ]]
[ 表达式1 ] || [ 表达式2 ] 等同于 [ 表达式1 -o 表达式2 ] [[ 表达式1 || 表达式2 ]]

操作符:

-a && 且 前后条件都要成立,逻辑与,而且的意思
o或▕▕ 只需前后条件中一个成立
逻辑否

二、if语句

1单分支

格式:
if [ 条件判断式 ]; than
当条件判断成立时,执行一条或多条命令
fi

如果只有一个判断式要进行,那么我们可以使用单分支的if语句 ,只有在条件成立时才会执行,否则不执行任何操作

2双分支结构

if [ 条件判断式 ]; then
当条件判断成立时,可以执行一条或多条命令
else
当条件判断不成立时,可以执行一条或多条命令
fi

在同一个数据的判断中,如果该数据需要进行两种不同的判断,就需要双分支if语句

判断用户输入的是否为yes :

[root@localhost ~]#vim reboot.sh 

#/bin/bash
read -p "请输入yes确定重启:" TEST
if [ $TEST = "yes" ]
then
echo 系统即将重启
else
echo 没有输入yes,系统将不重启
fi

3多分支结构

if [ 条件判断式 ]; then
当条件判断成立时,可以执行一条或多条命令
elif [ 条件判断式二 ]; then
当条件判断成立时,可以执行一条或多条命令
else
当上面的条件判断都不成立时,可以执行一条或多条命令
fi

如果数据需要进行多种不同的判断,则可以使用多分支结构 嵌套使用

[root@localhost ~]#vim reboot1.sh 

read -p "请输入yes或no:" TEST
if [ $TEST = "yes" ]
then
echo 你输入的为$TEST!
elif [ $TEST = "no" ]
then
echo 你输入的为$TEST!
else
echo 你输入的${TEST}有错误,请重启输入yes或者no!
fi

三元运算符

java,c

条件表达式?a:b

当条件表达式为真时,取a值;当条件表达式为假时,取b值

shell 表示三元运算符

[ 表达式 ] && a || b

双分支

if [ 表达式 ];then

...

else

...

fi

单分支

if [ 表达式 ];then

...

fi

[ 表达式 ] && a

[ 表达式 ] || a

[ 表达式 ] && a || b

多分支

if [ 表达式 ];then

...

elif [ 表达式 ];then

...

elif [ 表达式 ];then

...

[else]

fi

三、case

格式:
case 变量名称 in
模式1)
命令序列1
;;
模式2)
命令序列2
;;
*)
不包含第一个变量内容与第二个变量内容的其他程序执行段
默认程序段
;;
esac

注意点:

case行首必须以单词“in”,每一模式必须以单个右括号")"结束

双分号";;"表示命令序列的结束

模式字符串中,可以用方括号表示一个连续的范围,如"[0-9]";还可以使用竖杠|表示或,比如a|b

最后的)表示默认模式,其中的相当于通配符

示例:不管输出大小写字母,都能输出yes或者no

#!/bin/bash
read -p "请输入yes或者no:" i
case $i in
[Yy]|[Yy][Ee][Ss])
echo "你输入的yes正确"
;;
[Nn]|[Nn][Oo])
echo "你输入的no正确"
;;
esac

a=10

b=20

临时变量 tmp

借用第三方参数

[root@localhost ww]# a=10
[root@localhost ww]# b=20
[root@localhost ww]# tmp=$a
[root@localhost ww]# a=$b
[root@localhost ww]# b=$tmp
[root@localhost ww]# echo $a
20
[root@localhost ww]# echo $b
10

二、shell 脚本条件测试的更多相关文章

  1. 关于shell脚本——条件测试、if语句、case语句

    目录 一.条件测试 1.1.表达说明 1.2.test命令 文件测试 1.3.整数值比较 1.4.字符串比较 1.5.逻辑测试 二.if语句 2.1.单分支结构 2.2.双分支结构 2.3.多分支结构 ...

  2. shell脚本条件测试与比较

    1.条件测试常用语法 test 测试表达式 利用test命令进行条件测试表达式,test命令与测试表达式之间至少有一个空格 [ 测试表达式 ] 通过[ ]中括号进行条件测试表达式,[]中括号边界与测试 ...

  3. 学习笔记:CentOS7学习之二十一: 条件测试语句和if流程控制语句的使用

    目录 学习笔记:CentOS7学习之二十一: 条件测试语句和if流程控制语句的使用 21.1 read命令键盘读取变量的值 21.1.1 read常用见用法及参数 21.2 流程控制语句if 21.2 ...

  4. Linux就该这么学--Shell脚本条件语句(二)

    1.for条件语句 先读取多个不同的变量值,然后逐一执行同一组命令. 从列表文件中读取主机地址,逐个测试是否在线. 从ipadds.txt中读取主机地址后赋值给HLIST变量后逐个ping列表中的主机 ...

  5. shell编程基础(二): shell脚本语法之分支语句和循环语句

    一.分支语句 1.条件测试:test [ 命令test或[可以测试一个条件是否成立,如果测试结果为真,则该命令的Exit Status为0,如果测试结果为假,则命令的Exit Status为1(注意与 ...

  6. shell脚本编程测试类型上

    一bash的条件测试 判断某需求是否满足,需要由测试机制来实现.专用的测试表达式需要由测试命令辅助完成测试过程. 评估布尔声明,以便用在条件性执行中.若真,则返回0:若假,则返回1. 测试命令:• t ...

  7. 如何进行shell脚本正确性测试

    在实际工作中,需要对shell脚本进行正确性测试. 如何用最快最有效的方式进行测试? 很多开发的习惯是,二话不说,写完/拿到,就跑一把,看看输入,输出,想要的操作是否完成,也就过了. 其实这是十分不严 ...

  8. Shell编程-条件测试 | 基础篇

    什么是Shell Shell是一个命令解释器,它会解释并执行命令行提示符下输入的命令.除此之外,Shell还有另一个功能,如果要执行多条命令,它可以将这组命令存放在一个文件中,然后可以像执行Linux ...

  9. Linux就该这么学--Shell脚本条件语句(一)

    1.条件测试语句能够让Shell脚本根据实际工作灵活调整工作内容,例如判断系统的状态后执行指定的工作,或创建指定数量的用户,批量修改用户密码,这些都可以让Shell脚本通过条件测试语句完成. if条件 ...

随机推荐

  1. numpy教程06---ndarray的进阶操作

    欢迎关注公众号[Python开发实战], 获取更多内容! 工具-numpy numpy是使用Python进行数据科学的基础库.numpy以一个强大的N维数组对象为中心,它还包含有用的线性代数,傅里叶变 ...

  2. Kubernetes架构-图解

  3. 如丝般顺滑:DDD再实践之类目树管理

    在上次反思DDD实践之后,在类目树管理项目中再次实践DDD.从需求分析到建模和具体的落地,结合个人体会,都是干货.

  4. 重定向管道流读取TXT文本第一次读取为""空字符串、type xxx.txt | go run . 报错、BOM头、[239,186,191] 字节数组

    重定向管道流读取TXT文本第一次读取为""空字符串.type xxx.txt | go run . 报错.BOM头.[239 186 191] 字节数组

  5. 新手小白入门C语言第四章:变量与常量

    C 变量 变量其实只不过是程序可操作的存储区的名称. C 中每个变量都有特定的类型,类型决定了变量存储的大小和布局,该范围内的值都可以存储在内存中,运算符可应用于变量上. 变量的名称可以由字母.数字和 ...

  6. iOS全埋点解决方案-手势采集

    前言 ​ 随着科技以及业务的发展,手势的应用也越来越普及,因此对于数据采集,我们要考虑如果通过全埋点来实现手势的采集. 一.手势识别器 ​ 苹果为了降低开发者在手势事件处理方面的开发难度,定义了一个抽 ...

  7. 【HCIE】ipv6之6to4隧道如何计算48位前缀地址

    6to4隧道支持router-router,host-router,router-host,host-host 采用专用6to4地址,前缀为2002::/16 其中如何结合ipv4地址? 2002:i ...

  8. JAVA 基础(1)开发环境的搭建以及开发工具的选择

    ​  我们现在还是在学习阶段因此我们不用配置那么多的jdk,配置一个jdk8就够应付日常的学习了.前面的文章我尽量写详细一些照顾刚入坑的朋友.后文还有教大家怎么使用企业版的idea. 一.开发环境的搭 ...

  9. S2-045远程命令执行漏洞的利用

    Apache Struts2 远程命令执行 (S2-045) 漏洞介绍: 漏洞编号:S2-045CVE编号:CVE-2017-5638漏洞类型:远程代码执行漏洞级别:高危漏洞风险:黑客通过利用漏洞可以 ...

  10. k8s client-go源码分析 informer源码分析(2)-初始化与启动分析

    k8s client-go源码分析 informer源码分析(2)-初始化与启动分析 前面一篇文章对k8s informer做了概要分析,本篇文章将对informer的初始化与启动进行分析. info ...