iT邦幫忙

2017 iT 邦幫忙鐵人賽
DAY 14
0
自我挑戰組

30 天的 ShellScript 教室解決開發者的困擾系列 第 14

[鐵人賽第14天] if 、 && 、 || 與 [] ;

  • 分享至 

  • xImage
  •  

昨天講到了 exit code ,今天來講 exit code 的應用吧。

既然 exit code 可以拿來識別成功失敗,那麼拿來跟 if 配在一起用就在合理不過了:

if echo msg; then
    echo successful
fi

由於 Shell 沒有大括號 {} ,也不像 Python 用縮排定位,所以這裡就用 if 跟 fi 要執行的命令包起來。當然 Shell 裡面的 if 是可以有 else 的:

if rm record.txt; then
    echo delete succssful
else
    echo delete failed
fi

接著來介紹一個好用的指令:[

對別懷疑這個也是 Shell 可以呼叫的程式,就叫做 [。他本身不會回傳任何訊息,但是會回傳 exit code 方便使用,以下是幾個常用的方式:

  • [ -n "$VAR"]:判斷字串有沒有內容
  • [ "$VAR" == "STR" ]:判斷 $VAR 的內容是否與 STR 相等
  • [ "$VAR" != "STR" ]:判斷 $VAR 的內容是否與 STR 不相等
  • [ -e ./node_module ]:判斷檔案是否存在(無論資料夾或檔案)
  • [ -d ./node_module ]:判斷資料夾是否存在
  • [ -f package.json ]:判斷檔案是否存在(不可以是資料夾)

其他就請自己 man [ 來查囉。

除了用 if 寫好幾行的判斷外,其實 &&|| 也有類似效果,當你需要把指令縮成一行(像是你要在 package.json 裡面插入判斷式的時候),以上面的

if rm record.txt; then
    echo delete succssful
else
    echo delete failed
fi

來講,你可以把他寫成 rm record.txt && echo successful || echo failed

那分號的功能呢?假如你寫了以下的判斷式:

if [ -d node_module]; then
    rm -rf node_module
fi
npm install

要怎麼塞成一行呢?平常我們可以用換行表示上一個指令結束,不過為了縮成一行,我們就用 ; 來代替換行吧:[ -d node_module] && rm -rf node_module; npm install ,是的跟 Python 有點像,可以用 ; 來取代換行。


我是誰?
我是 dd-han ,可以叫我呆翰,是國立臺中科技大學的延畢生 與 創科資訊的時習生。


上一篇
[鐵人賽第13天] 談談 exit code
下一篇
[鐵人賽第15天] 使用 while 迴圈
系列文
30 天的 ShellScript 教室解決開發者的困擾23
圖片
  直播研討會
圖片
{{ item.channelVendor }} {{ item.webinarstarted }} |
{{ formatDate(item.duration) }}
直播中

尚未有邦友留言

立即登入留言