<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國際加速解決方案。 廣告
                [TOC] # 簡介   shell 是一個交互性命令解釋器。   shell 獨立于操作系統,Shell 俗稱殼(用來區別于核),是指“提供使用者使用界面”的軟件(命令解析器)。它類似于DOS 下的 command 和后來的 cmd.exe。它接收用戶命令,然后調用相應的應用程序。 這種設計讓用戶可以靈活選擇適合自己的 shell 。shell 讓你在命令行鍵入命令,經過 shell 解釋后傳送給操作系統(內核)執行。   **shell是一個命令處理器(command processor)——是一個讀入并解釋你輸入的命令的程序。**除了是一個命令中斷器以外,shell 還是一個程序設計語言。你可以編寫 shell 可以解釋的程序(被稱為源程序),這些源程序可以包含 shell 程序設計命令等等。shell 除了解釋命令以外,還有其他工作,它也可以配置和編程。   shell 擁有自己的語言允許用戶編寫程序并以一種復雜方式運行。shell 編程語言具有許多常用的編程語言的特征,例如:循環和控制結構等。用戶可以生成像其他應用程序一樣復雜的 shell 程序。 ## Linux Shell Shell種類眾多,常見的有: **Bourne-Again shell** ( `/bin/bash`) **Bourne shell** (` /usr/bin/sh`或`/bin/sh`,Stephen Bourne,1979年) Korn shell ( usr/bin/ksh,David Korn,80年代中期) POSIX shell ( sh) Shell for Root(/sbin/sh) C shell (包括 /usr/bin/csh and tcsh,Bill Joy,70年代末期) TENEX/TOPS C shell ( tcsh) ... **Bash**,也就是 Bourne Again Shell,由于易用和免費,Bash 在日常工作中被廣泛使用。同時,Bash 也是大多數 Linux 系統默認的 Shell(GNU Bourne Again Shell)。 > 在一般情況下,人們并不區分 Bourne Shell 和 Bourne Again Shell,所以,像 `#!/bin/sh`,它同樣也可以改為`#!/bin/bash`。 > `#!` 告訴系統其后路徑所指定的程序即是解釋此腳本文件的 Shell 程序。 # 系統中的 shell 其實 zsh 也是一種 shell ,但是并不是我們系統默認的 shell ,unix 衍生系統的默認 shell 都是 bash 我們看下系統內置了幾種 shell: ``` $ cat /etc/shells ``` 使用`bash -version` 命令來查看當前 shell 的版本號 查看當前用的是哪種 shell: ``` $?echo $0 ``` 更換系統的 shell 為 zsh: ~~~shell chsh -s /bin/zsh ~~~ > [linux更換shell為zsh并個性化配置oh my zsh](https://cloud.tencent.com/developer/article/1135521) # bashrc 與 profile 要搞清 bashrc 與 profile 的區別,首先要弄明白什么是交互式 shell 和非交互式 shell,什么是 login shell 和 non-login shell。 交互式模式就是 shell 等待你的輸入,并且執行你提交的命令。這種模式被稱作交互式是因為 shell 與用戶進行交互。這種模式也是大多數用戶非常熟悉的:登錄、執行一些命令、簽退。當你簽退后,shell 也終止了。 shell 也可以運行在另外一種模式:非交互式模式。在這種模式下,shell 不與你進行交互,而是讀取存放在文件中的命令,并且執行它們。當它讀到文件的結尾,shell 也就終止了。 bashrc 與 profile 都用于保存用戶的環境信息,bashrc用于交互式 non-loginshell,而 profile 用于交互式 login shell。 ## 識別 login shell 要識別一個shell是否為login shell,只需在該shell下執行: ``` # echo $0 ``` 如果輸出為該 shell 名字,加上一個'-'前綴,則說明該 shell 為 login shell,沒有'-'前綴則是 no login。 1. 當 bash 以 login shell 啟動時,它會執行`/etc/profile`中的命令,然后`/etc/profile`調用`/etc/profile.d`目錄下的所有腳本;然后執行`~/.bash_profile`,`~/.bash_profile`中顯式調用`~/.bashrc`,最后`~/.bashrc`又調用`/etc/bashrc`。 2. 非 login 方式啟動時,它會調用`~/.bashrc`,隨后`~/.bashrc`中調用`/etc/bashrc`,最后`/etc/bashrc`調用所有`/etc/profile.d`目錄下的腳本。 ## profile 文件 系統中存在許多 bashrc 和 profile 文件,下面逐一介紹: | 文件 | 描述 | | --- | --- | | `/etc/profile` | 此文件為系統的每個用戶設置環境信息,當用戶第一次登錄時,該文件被執行。并從`/etc/profile.d`目錄的配置文件中搜集 shell 的設置。| | `/etc/bashrc` | 為每一個運行`bash` shell的用戶執行此文件。當``bash``shell被打開時,該文件被讀取。| | `~/.bashrc` | 該文件包含專用于你的 bash shell 的 bash 信息,當登錄時以及每次打開新的 shell 時,該文件被讀取。 | | `~/.profile`或者`~/.bash_profile` | 用戶可以使用該文件輸入自己需要使用的 shell 信息,當用戶登錄時,該文件僅僅執行一次!默認情況下,它設置一些環境變量,執行用戶的`.bashrc`文件。| | `~/.bash_logout` | 當每次退出系統(退出``bash``shell)時,執行該文件。 | > 注意:`.profile`是 unix 上才有的;`.bash_profile`是 Linux 下有的(Linux下,用戶目錄沒有`.profile`文件) 。 > 另外,`/etc/profile`中設定的變量(全局)的可以作用于任何用戶,而`~/.bashrc`等中設定的變量(局部)只能繼承`/etc/profile`中的變量,他們是``"父子"``關系。 > [交互式shell和非交互式shell、登錄shell和非登錄shell的區別](https://blog.csdn.net/airings/article/details/8756938) > [深入淺出理解交互式shell和非交互式shell、登錄shell和非登錄shell的區別](https://blog.csdn.net/gui951753/article/details/79154496) ## `.bash_profile`進行個性化設置 每次修改`.bashrc`后,使用`source ~/.bashrc`(或者`. ~/.bashrc`)就可以立刻加載修改后的設置,使之生效。 一般會在`.bash_profile`文件中顯式調用`.bashrc`。登陸 linux 啟動 bash 時首先會去讀取`~/.bash_profile`文件,這樣`~/.bashrc`也就得到執行了,你的個性化設置也就生效了。 利用這一特性,可以實現一些個性化設置,如:Linux 系統開機執行自動某個腳本文件等,這在自動化運維方面有一定的用處。 1. 修改`/home/bing/.bashrc`文件: ~~~ sudo vim /home/bing/.bashrc # 在最后添加兩句后保存 echo '這句話開機就會啟動' # 打印輸出 python3 /home/bing/test.py # 執行 test.py 這個腳本,打印輸出 hello world! ~~~ 2. 當 Linux 開機后: ```shell 這句話開機就會啟動 hello world! ``` 可以看到 Linux 開機后加載了`.bashrc`文件。 > [Linux 中 bashrc 中的 rc 是什么意思](https://blog.csdn.net/u010167269/article/details/52612260) # shell 功能 以下是shell 功能的一個匯總: 查找命令的位置并且執行相關聯的程序; 為shell變量賦新值; 執行命令替代; 處理 I/O重定向和管道功能; 提供一個解釋性的編程語言界面,包括tests、branches和loops等語句。 當你在命令行中敲入bash命令時,相當于進入bash環境,如果本身就是bash環境,那么就是進入一個子bash環境(相當于開了一個子進程)。 參考:http://bbs.chinaunix.net/thread-2325808-1-1.html # 特殊符號 當我們需要一次執行多個命令的時候,命令之間需要用連接符連接,不同的連接符有不同的效果。下面我們總結一下,加以區分。 (1) `;` 分號,沒有任何邏輯關系的連接符。當多個命令用分號連接時,各命令之間的執行成功與否彼此沒有任何影響,都會一條一條執行下去。 (2) `||` 邏輯或,當用此連接符連接多個命令時,前面的命令執行成功,則后面的命令不會執行。前面的命令執行失敗,后面的命令才會執行。 (3) `&&` 邏輯與,當用此連接符連接多個命令時,前面的命令執行成功,才會執行后面的命令,前面的命令執行失敗,后面的命令不會執行,與 || 正好相反。 (4) `|` 管道符,當用此連接符連接多個命令時,前面命令執行的正確輸出,會交給后面的命令繼續處理。若前面的命令執行失敗,則會報錯,若后面的命令無法處理前面命令的輸出,也會報錯。 例`ls | grep *.txt` # 參考 > [第十一章、認識與學習BASH](http://cn.linux.vbird.org/linux_basic/0320bash.php) https://blog.csdn.net/wenlifu71022/article/details/4069929 http://blog.csdn.net/ClementAD/article/details/46793827 http://blog.csdn.net/sinat_30196907/article/details/48436979 http://blog.csdn.net/hack8/article/details/39672145 http://blog.csdn.net/duguduchong/article/details/8486663 http://blog.csdn.net/OldHusband/article/details/69058143 http://blog.csdn.net/sjl110/article/details/72628869 http://blog.csdn.net/China_Guanq/article/details/51726842 http://blog.csdn.net/qq_35242986/article/details/73772212
                  <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>

                              哎呀哎呀视频在线观看