<ruby id="bdb3f"></ruby>

    <p id="bdb3f"><cite id="bdb3f"></cite></p>

      <p id="bdb3f"><cite id="bdb3f"><th id="bdb3f"></th></cite></p><p id="bdb3f"></p>
        <p id="bdb3f"><cite id="bdb3f"></cite></p>

          <pre id="bdb3f"></pre>
          <pre id="bdb3f"><del id="bdb3f"><thead id="bdb3f"></thead></del></pre>

          <ruby id="bdb3f"><mark id="bdb3f"></mark></ruby><ruby id="bdb3f"></ruby>
          <pre id="bdb3f"><pre id="bdb3f"><mark id="bdb3f"></mark></pre></pre><output id="bdb3f"></output><p id="bdb3f"></p><p id="bdb3f"></p>

          <pre id="bdb3f"><del id="bdb3f"><progress id="bdb3f"></progress></del></pre>

                <ruby id="bdb3f"></ruby>

                合規國際互聯網加速 OSASE為企業客戶提供高速穩定SD-WAN國際加速解決方案。 廣告
                ##shell十三問之12:你要if還是case呢? -------------------------------------- 還記得我們在第10章所介紹的`return value`嗎? 是的,接下來的介紹的內容與之有關, 若你的記憶也被假期所抵消的話, 那建議您還是回去溫習溫習再回來... 若你記得`return value`,我想你也應該記得了 `&&` 與 `||` 什么意思吧? 用這兩個符號再搭配 command group的話, 我們可讓shell script變得更加聰明哦。 比方說: ```shell cmd1 && { cmd2 cmd3 ; } || { cmd4 cmd5 } ``` 意思是說: 若 cmd1的`return value`為true的話, 然后執行cmd2與cmd3, 否則執行cmd4與cmd5. 事實上, 我們在寫shell script的時候, 經常需要用到這樣、那樣的條件 以作出不同的處理動作。 用`&&`與`||`的確可以達成條件執行的結果, 然而,從“人類語言”上來理解, 卻不是那么直觀。 更多時候,我們還是喜歡用`if...then...else...` 這樣的的keyword來表達條件執行。 在bash shell中,我們可以如此修改上一段代碼: ```shell if cmd1 then cmd2 cmd3 else cmd4 cmd5 fi ``` 這也是我們在shell script中最常用的`if`判斷式: 只要`if`后面的command line返回true的return value (我們常用`test`命令返回的return value), 然則就執行`then`后面的命令,否則,執行`else`之后的命令, `fi`則是用來結束判斷式的keyword。 在`if`的判斷式中,`else`部分可以不用,但`then`是必需的。 (若`then`后不想跑任何command,可用`:`這個`null command`代替)。 當然,then或else后面,也可以再使用更進一層的條件判斷式, 這在shell script的設計上很常見。 若有多項條件需要"依序"進行判斷的話, 那我們則可使用`elif`這樣的keyword: ```shell if cmd1; then cmd2; elif cmd3; then cmd4 else cmd5 fi ``` 意思是說: 若cmd1為true,然則執行cmd2; 否則在測試cmd3,若為true則執行cmd4; 倘若cmd1與cmd3均不成立,那就執行cmd5。 `if`判斷式的例子很常見,你可從很多shell script中 看得到,我這里不再舉例子了... 接下來為要為大家介紹的是`case`判斷式。 雖然`if`判斷式已可應付大部分的條件執行了, 然而,在某些場合中,卻不夠靈活, **尤其是在string式樣的判斷上**,比方如下: ```shell QQ() { echo -n "Do you want to continue? (Yes/No): " read YN if [ "$YN" = Y -o "$YN" = y -o "$YN" = "Yes" -o "$YN" = "yes" -o "$YN" = YES] then QQ else exit 0 fi } QQ ``` 從例中,我們看得出來, 最麻煩的部分是在判斷YN的值可能有好幾種樣式。 聰明的你或許會如此修改: ```shell QQ() { echo -n "Do you want to continue? (Yes/No): " read YN if echo "$YN" | grep -q '^[Yy]\([Ee][Ss]\)*$' then QQ else exit 0 fi } QQ ``` 也就是用`Regular Expression`來簡化代碼。 (我們有機會,再來介紹`RE`) 只是...是否有其他更方便的方法呢? 有的,就是用`case`判斷式即可: ```shell QQ() { echo -n "Do you want to continue? (Yes/No): " read YN case "$YN" in [Yy]|[Yy][Ee][Ss]) QQ ;; *) exit 0 ;; esac } QQ ``` 我們常用的`case`的判斷式來判斷某一變量 在不同的值(通常是string)時,作出不同的處理, 比方說, **判斷script參數,以執行不同的命令**。 若你有興趣,且用linux系統的話, 不妨挖一挖`/etc/init.d/*`中的那堆script中的`case`用法. 如下就是一例: ```shell case "$1" in start) start ;; stop) stop ;; status) rhstatus ;; restart|reload) restart ;; condrestart) [ -f /var/lock/subsys/syslog ] && restart || : ;; *) echo $"Usage: $0 {start|stop|status|restart|condrestart}" exit 1 esac ``` (若你對 postional parameter的印象已經模糊了,請重看第9章吧。) okay,是十三問還剩一問而已,過幾天再來搞定之...^_^
                  <ruby id="bdb3f"></ruby>

                  <p id="bdb3f"><cite id="bdb3f"></cite></p>

                    <p id="bdb3f"><cite id="bdb3f"><th id="bdb3f"></th></cite></p><p id="bdb3f"></p>
                      <p id="bdb3f"><cite id="bdb3f"></cite></p>

                        <pre id="bdb3f"></pre>
                        <pre id="bdb3f"><del id="bdb3f"><thead id="bdb3f"></thead></del></pre>

                        <ruby id="bdb3f"><mark id="bdb3f"></mark></ruby><ruby id="bdb3f"></ruby>
                        <pre id="bdb3f"><pre id="bdb3f"><mark id="bdb3f"></mark></pre></pre><output id="bdb3f"></output><p id="bdb3f"></p><p id="bdb3f"></p>

                        <pre id="bdb3f"><del id="bdb3f"><progress id="bdb3f"></progress></del></pre>

                              <ruby id="bdb3f"></ruby>

                              哎呀哎呀视频在线观看