在做项目的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 命令的解释是:
接下来就简单介绍一下这个神器的用法,比如下面这个基础命令
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 啊,赶紧去试试!