Yaml 文件中Condition If- else 判斷的問題

在作項目的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

  1. test 表示的你將要進行一個比較
  2. 1 是你第一個要比較的數據
  3. -eq 表示 equal 就是等於
  4. 2 是你第二個要比較的數據
  5. && 這個符號後的語句會在表達式爲 true時執行
  6. || 這個符號後面的語句會在表達式爲 false的時候執行

當比較的是數字時,還能夠又如下其餘符號:unix

  1. -eq 還有其餘比較的符號
  2. -ge : 表示 大於等於
  3. -gt: great than 大於
  4. -le: less equal than 小於等於
  5. -lt: 小於
  6. -ne: 不等於

當比較的是 Text時code

  1. = :表示的是 string 1 和 stirng2 匹配,相等
  2. != :和上面相反
  3. -n :表示這個字符串的長度大於 0
  4. -z: 表示這個字符串長度等於 0

當比較 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 啊,趕忙去試試!

參考文章:
How to Use Test Conditions Within a Bash Script

相關文章
相關標籤/搜索