<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 子Shell或者叫子進程,是從父子進程的概念出發的,UNIX操作系統的進程從init進程開始其他均有其對應的子進程,就算是由于父進程先行結束導致的孤兒進程,也會被init領養使其父進程ID為1。在Bash中 通常會通過以下幾種形式產生子進程: * &,提交后臺作業 * \|,管道 * \(\),操作符 * 外部命令 需要注意的是,在寫Bash腳本過程中推薦_\*\*_使用Bash內建\(builtin\)命令,因為外部命令會forks一個子進程效率并不是很高,我們來看以下測試案例: ``` [root@blog.puppeter.com_centos ~]# time for i in `seq 1 1000`;do result=$(expr length $test);done real 0m0.764s user 0m0.437s sys 0m0.323s [root@blog.puppeter.com_centos ~]# time for i in `seq 1 1000`;do result={#test} ;done real 0m0.005s user 0m0.005s sys 0m0.000s ``` 案例主要是測試test字符串的長度。第一個案例調用了外部命令,第二個命令是調用內部命令可以看到最終的執行結果性能相差100倍之多,所以推薦在編寫腳本過程中盡量使用內建命令。 ### 子Shell案例 #### 案例1 使用\(\)操作符來創建子進程。 ``` #!/bin/bash echo "Father Shell is: $BASH_SUBSHELL" # 打印父Shell的層次,為0 outervar=OUTER # 父Shell的變量outervar ( # 利用圓括號結構創建子Shell echo "SubShell is: $BASH_SUBSHELL" # 子Shell的層次為1 ( echo "GrandSubShell is: $BASH_SUBSHELL" # 孫Shell的層次為2 ) innervar=INNER # 子Shell的變量 echo "innervar=$innervar" echo "outervar=$outervar" # outervar繼承了符Shell所賦給它的值 ) # 回到父shell echo "Father Shell is: $BASH_SUBSHELL" if [ -z "$innervar" ] # 子Shell中定義變量為空,則說明并沒有獲取子Shell中變量 then echo "The \$innervar is not defined in main body." else echo "The \$innervar is defined in main body." fi ``` #### 案例2 通過管道\| ,& 和()方式組成命令組并實現并發執行的效果,譬如以下這個案例: ``` #!/bin/bash (grep -r "root" /etc/* | sort > part1) & # 與root關鍵字匹配的行,排序后輸出到某文件 (grep -r "root" /usr/local/* | sort > part2) & (grep -r "root" /lib/* | sort > part3) & wait # 等待后臺執行的作業全部完成 cat part1 part2 part3 | sort > parttotal echo "Run time of this script is:$SECONDS" # 輸出該腳本執行時間 ``` #### 案例3 有的同學也會關心\(\)和{}操作符的區別,其實他們都是對命令組執行: 相同點: * \(\)和{}都是把一串的命令放在括號里面,并且命令之間用;號隔開執行 不同點: * \(\)只是對一串命令重新開一個子Shell進行執行,{}對一串命令在當前Shell執行 * \(\)最后一個命令可以不用分號,{}最后一個命令要用分號 > 注意: 在使用{}時,{}與命令之間必須使用一個空格 看以下案例。 ``` [root@blog.puppeter.com_centos ~]# A=1;echo $A;{ A=2; };echo $A 1 2 [root@blog.puppeter.com_centos ~]# A=1;echo $A;(A=2);echo $A 1 1 ```
                  <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>

                              哎呀哎呀视频在线观看