Yaml 文件中Condition If- else 判断的问题
在做项目的CI/ CD 时,难免会用到 Travis.CI 和 AppVeyor 以及 CodeCov 来判断测试的覆盖率,今天突然遇到了一个问题,就是我需要在每次做测试的时候判断是否存在一个环境变量,我对于 script 脚本半只半解还不太懂的状态,我最初的打算是这样写的
if [-z $ENV_VALUE && -z $ENV_VALUE]; then
    #do something
else
    #do another
fi
没想到,在windows上跑着正常的,编写到 .yml 文件的 script 中时,在 GitHub 上就报错了,说-z was unexcepted at this time. 看的我真的是一脸懵啊,什么鬼。去Google 了一下,也没有找到什么可靠的答案,于是我去翻了翻其他语言的项目中是如何写 .yml 文件的,刚开始其实我也去看了看,只记得里面有个这个命令 test -z $ENV_VALUE -a -z $ENV_VALUE 。开始没有太注意,后来发现这个 test 命令我在写脚本时怎么从来没见过呢,去Google 了一下,发现新大陆。
这个 Test 命令的解释是:
The test command can be used on the Linux command line to compare one element against another, but it is more commonly used in BASH shell scripts as part of conditional statements which control logic and program flow
接下来就简单介绍一下这个神器的用法,比如下面这个基础命令
test 1 -eq 2 && echo "yes" || echo "no"
上面这段命令的意思是 1 等于 2 吗? 如果等于就输出 yes 否则输出 no 显然答案是 no

具体解剖开来就是
- test 表示的你将要进行一个比较
- 1 是你第一个要比较的数据
- -eq 表示 equal 就是等于
- 2 是你第二个要比较的数据
- && 这个符号后的语句会在表达式为 true时执行
- || 这个符号后面的语句会在表达式为 false的时候执行
当比较的是数字时,还可以又以下其他符号:
- -eq 还有其他比较的符号
- -ge : 表示 大于等于
- -gt: great than 大于
- -le: less equal than 小于等于
- -lt: 小于
- -ne: 不等于
当比较的是 Text时
- = :表示的是 string 1 和 stirng2 匹配,相等
- != :和上面相反
- -n :表示这个字符串的长度大于 0
- -z: 表示这个字符串长度等于 0
当比较 string 类型或者是 file 文件都有相应的符号来进行比较,对于要在 bash 上脚本中进行比较很是方便。
对于我之前想要在 .yml 文件中进行比较判断的语句,则可以写成以下这个样了:
test -z $ENV_VALUE1 -a -z $ENV_VALUE2 && dotnet test --filter Category = category1 || dotnet test --filter Category = all
# -a 代表的是 and
是不是 So easy 啊,赶紧去试试!
参考文章:
How to Use Test Conditions Within a Bash Script
Yaml 文件中Condition If- else 判断的问题的更多相关文章
- day11_单元测试_读取yaml文件中的用例,自动获取多个yaml文件内容执行生成报告
		一.使用.yaml格式的文件直接可以存放字典类型数据,如下图,其中如果有-下一行有缩进代表这是个list,截图中是整体是一个list,其中有两部分,第二部分又包含另外一个list 二.单元测试:开发自 ... 
- 新版的K8S中的flannel.yaml文件中要注意的细节
		部署flannel作为k8s中的网络插件,yaml文件都大小同异. 但在要注意以下细节. 以前,只需要前面master判断. 现在也需要有not-ready状态了. tolerations: - ke ... 
- YAML文件中在单一文件中区分多个文件
		1.在单一文件中,可用连续三个连字号(---)区分多个文件. 2.另外,还有选择性的连续三个点号( ... )用来表示文件结尾. 题外:YAML其实语法很多也很灵活,但是针对Spring支持的语法其实 ... 
- Python--代码1(接口测试:测试用例从数据库读取写到yaml文件中)
		一. 从数据库中读取全部接口,并写入yaml文件 数据库中的数据存储格式如下图: import pymysql import os import json # from ruamel import y ... 
- HtmlWebpackPlugin用的html的ejs模板文件中如何使用条件判断
		折腾: [已解决]给react-hot-boilerplate中的index.html换成用HtmlWebpackPlugin自动生成html 期间,已经有了思路了,但是不知道如何在ejs的html中 ... 
- Kubernetes的yaml文件中command的使用
		前面说了init容器initContainers,这主要是为应用容器做前期准备工作的,一般都会用到shell脚本,这就会用到command,这里写写command的用法. command就是将命令在创 ... 
- k8s  yaml 文件中字段类型:
		1.<Object> 对象类型 metadata: name: namespace: 2.<[]Object> 对象列表类型 containers: - name: ... 
- k8s中新建一个namespace和harborsecret的yaml文件
		注意哟, 不同的harborsecret,在不同的namespace中,是不共用的. 也就是说,如果在default名字空间中,创建了一个docker login secret, 在其它名字空间中,是 ... 
- [Kubernetes]yaml文件详解
		应前一段时间夸下的海口:[Kubernetes]如何使用yaml文件使得可以向外暴露服务,说过要写一篇关于yaml文件详解的文章出来的,今天来总结一下.yaml文件用在很多地方,但是这里以介绍在Kub ... 
随机推荐
- 不支持find_element_by_name元素定位方法,抛不支持find_element_by_name元素定位方法,会抛如下错误  org.openqa.selenium.InvalidSelectorException: Locator Strategy 'name' is not supported for this session的解决
			appium1.5后不支持find_element_by_name元素定位方法,会抛如下错误 org.openqa.selenium.InvalidSelectorException: Locator ... 
- 《vue.js快跑》总结:为什么选择VUE
			2019-3-31 为什么选择Vue 有这个一个需求,我们需要根据后端数据接口请求返回的数组在页面中按列表展示? 传统上我们使用jQuery的Ajax发送http请求,获取数据.判断列表数据是否存在, ... 
- 生成图形化html报告
			生成图形化html报告: 1.从cmd 进入执行测试文件 2.执行该命令:jmeter -n -t <test JMX file> -l <test log file> -e ... 
- Elasticsearch System Call Filters Failed to Install
			Elasticsearch starts to run, error occurs: : system call filters failed to install; check the logs a ... 
- 《Serverless架构-无服务单页应用开发》读后感
			本书的作者是[美]Ben Rady,译者郑赞美.简传挺,书中作者详细的介绍了如何使用html.js以及amazon提供的诸多云服务(Simple Storage Service(S3).Cognito ... 
- android-读取MediaProvider
			1.MediaProvider存储手机中的媒体文件,用 SQLite 数据库存储图片.视频.音频等多媒体文件的信息,供视频播放器.音乐播放器.图库使用.以 root 权限进入 adb shell,使用 ... 
- prime distance on a tree(点分治+fft)
			最裸的点分治+fft,调了好久,太菜了.... #include<iostream> #include<cstring> #include<cstdio> #inc ... 
- 在windows上安装VTK
			看了很多教程,花了1天半的时间装上了,记录下. 前置条件:我安装了VS2015,用来编译工程. 参考资料 官方:http://www.vtk.org/Wiki/VTK/Building 安装:http ... 
- HTML标签的绝对路径和相对路径
			我在javaweb中写json的Demo的时候遇到了这个问题,图片一一直取不出来,查了好久终于解决了,所以现在记录一下. 绝对路径: 其实很容易理解,如果你是一个普通的项目,那就是它在你电脑里真实存在 ... 
- Java变成思想--多线程
			Executor :线程池 CatchedThreadPool:创建与所需数量相同的线程,在回收旧线程是停止创建新县城. FixedThreadPool:创建一定数量的线程,所有任务公用这些线程. S ... 
