在作項目的CI/ CD 時,不免會用到 Travis.CI 和 AppVeyor 以及 CodeCov 來判斷測試的覆蓋率,今天忽然遇到了一個問題,就是我須要在每次作測試的時候判斷是否存在一個環境變量,我對於 script 腳本半隻半解還不太懂的狀態,我最初的打算是這樣寫的linux
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 了一下,發現新大陸。shell
這個 Test 命令的解釋是:windows
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 flowbash
接下來就簡單介紹一下這個神器的用法,好比下面這個基礎命令less
test 1 -eq 2 && echo "yes" || echo "no"
上面這段命令的意思是 1 等於 2 嗎? 若是等於就輸出 yes 不然輸出 no 顯然答案是 no
測試
具體解剖開來就是this
當比較的是數字時,還能夠又如下其餘符號:unix
當比較的是 Text時code
當比較 string 類型或者是 file 文件都有相應的符號來進行比較,對於要在 bash 上腳本中進行比較非常方便。
對於我以前想要在 .yml 文件中進行比較判斷的語句,則能夠寫成如下這個樣了:blog
test -z $ENV_VALUE1 -a -z $ENV_VALUE2 && dotnet test --filter Category = category1 || dotnet test --filter Category = all # -a 表明的是 and
是否是 So easy 啊,趕忙去試試!