<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>

                ??一站式輕松地調用各大LLM模型接口,支持GPT4、智譜、豆包、星火、月之暗面及文生圖、文生視頻 廣告
                總第4篇 在前面博文中我講過了變量基礎部分[《變量基本概念及其初始化》](http://blog.csdn.net/guodongxiaren/article/details/38402577)。我們知道假如我們有初始化一個變量a=hello,那么如果我們想打印它的值,我們需要使用echo $a。 但是除此之外還有很多特殊的變量,可供 $ 使用。本文講到了$0 # * @ _ ? ! -這幾個特殊變量的含義。 ## 腳本的參數 正如同C語言中有main(int argc,char **argv),Java中有main(String[]args)一樣,Bash同樣能對執行腳本時附加的參數做操作。 ### 引用腳本的參數n 看一個簡單的腳本**test.sh**: ~~~ #!/bin/bash echo $0 $1 $2 $3 ~~~ 然后看一下我的屏幕輸出情況。 ![](https://box.kancloud.cn/2016-02-19_56c6cdb26e516.jpg) 沒錯,和你想的一樣。數字變量0,保存的是這個執行腳本的名稱,其他的數字1到n保存該腳本運行時的第1到第n個參數。 如果沒有腳本在運行,比如直接在終端中鍵入echo $0,那么顯示的是shell的名稱。 ### 參數的個數# 現在我們繼續修改一下test.sh這個腳本 ~~~ #!/bin/bash echo "腳本$0的參數的個數為$#" echo "分別是:" echo $1 $2 $3 ~~~ 輸出的結果是: ![](https://box.kancloud.cn/2016-02-19_56c6cdb282785.jpg) `#`號代表參數的個數,實際上在Bash中#代表個數的情況,并無只此一例,以后我們在講*字符串操作*的時候還會見到。 ### 所有的參數*和@ 繼續修改腳本 ~~~ #!/bin/bash echo "腳本$0的參數的個數為$#" echo "分別是:" echo $@ echo $* ~~~ 試試。 ![](https://box.kancloud.cn/2016-02-19_56c6cdb28fe00.jpg) 沒錯@,* 就是所有變量。從這里來看似乎兩者沒有差別。但是其實是不同的,通配符*將所有參數視作一個變量,而@則可以理解為所有參數的集合。 看一個長一點的腳本,star_at.sh(代表著star*和at@) 關于for循環,你可能還不理解,但是并沒有關系,這里僅僅是簡單的遍歷。 ~~~ #!/bin/bash echo $* echo $@ echo "遍歷不帶引號的變量*" for i in $* do echo $i done echo "遍歷帶引號的變量*" for i in "$*" do echo $i done echo "遍歷不帶引號的變量@" for i in $@ do echo $i done echo "遍歷帶引號的變量@" for i in "$@" do echo $i done ~~~ ![](https://box.kancloud.cn/2016-02-19_56c6cdb29d64d.jpg) 看出來了沒,當遍歷的時候,可以發現,如果$@,$都沒有被引號包圍,那么兩者沒有差別。但是如果有了引號,則不同。可以發現$其實只是一個值而已。 ### 最后一個參數_ $_保存的是命令(或腳本)的最后一個參數。 ~~~ #!/bin/bash echo "腳本$0的參數的個數為$#" echo "分別是:" echo $@ echo "最后一個參數是$_" ~~~ 輸出結果是: ![](https://box.kancloud.cn/2016-02-19_56c6cdb2b6313.jpg) ## 其他特殊變量 ### 退出碼? 當我們執行完一個命令的時候,都可以用 echo $? 來查看命令的退出碼 ***exit code***(或稱返回碼),從而判斷命令是否正確執行。可以理解為命令的返回值(后面我們學到Bash函數的時候,也會用它來做返回值),但是與其他語言不同的是它只是一個固定的8位二進制數,也就是說它的范圍是0-255。并沒有其他語言中返回值那么豐富的功能。所以我個人喜歡稱之為**碼**而不是 值。(當然這不是重點) ![](https://box.kancloud.cn/2016-02-19_56c6cdb2c9597.jpg) 上面是個簡單的例子,用which檢查某個命令是否存在,通過返回值可以了解。0代表成功,非0代表不成功。這可能與其他語言的思想相悖,但是也可以理解,畢竟*成功的狀態只有一個,而錯誤的情況卻有許多種*,所以用正數來標記錯誤狀態。 不過通常在腳本內部,我一般不會直接用到$?來判斷一個命令的返回值,if [? ]就差不多了。 當前進程的PID $ echo $$可以打印當前進程的PID(PID是什么,我就不解釋了)。繼續修改test.sh,你只需要關注最后一句就可以了。 ~~~ #!/bin/bash echo "腳本$0的參數的個數為$#" echo "分別是:" echo $@ echo "最后一個參數是$_" echo "當前進程的PID為$$" ~~~ 輸出結果是: ![](https://box.kancloud.cn/2016-02-19_56c6cdb2d90ee.jpg) ### 后臺執行的最后一個命令的PID ! shell執行命令的時候有前臺和后臺的概念。一直和你交互的就是前臺,但是有些命令會阻塞進程,導致你無法輸入其他命令。比如在終端里打開了一個圖形編輯器gedit或者火狐瀏覽器的時候。不過我們可以通過在命令后面加一個&,來把它丟到后臺,比如** gedit &**,這樣就不會阻塞前臺進程,你可以繼續輸入其他命令。 我喜歡在終端啟動瀏覽器,現在我們來試試$!,是不是可以查看它的PID。 ![](https://box.kancloud.cn/2016-02-19_56c6cdb2e8a4c.jpg) 關于 >/deb/null 2>&1這部分會在以后輸入輸出重定向的時候講到。它的功能是把火狐的各種終端輸出丟進垃圾桶,不在屏幕上顯示。 ### 當前shell的默認選項 - ![](https://box.kancloud.cn/2016-02-19_56c6cdb309704.jpg) himBH是Bash的當然的默認選項,可以使用set -o打開某一選項,或者set +o來關閉某一選項。關于這幾個選項的含義,超出本文敘述范圍,![偷笑](https://box.kancloud.cn/2016-01-18_569ca4488de4a.gif) 超綱內容請同學們自行 - man bash - /-h - /-i - /-m - /-B - /-H 來查看![再見](https://box.kancloud.cn/2016-01-25_56a5a366e5bcb.gif) 本系列(玩轉Bash腳本)更多文章,請訪問:[http://blog.csdn.net/column/details/wanbash.html](http://blog.csdn.net/column/details/wanbash.html)
                  <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>

                              哎呀哎呀视频在线观看