Linux 開啟shell的過程;bash基本使用

來源:互聯網
上載者:User

登入到shell的過程

  1. linux系統在調用init初始化進程之前,主要是完成系統層級的一系列動作,此時,使用者根本無法使用系統,因為系統根本沒有讓使用者控制系統的途徑!
  2. init之所以存在,其意義應該是增加linux的靈活性 和 標準性:變異的linux完全可以調用其他的init程式;有了統一的init入口後,可以機動的定義之後的調用動作。
  3. 一般的linux總是調用init作為pid=1的進程,它是所有進程的起點!
  4. init調用login進程,進行登陸驗證
  5. login調用shell。shell有很多中,找個適合你自己的就行了
  6. shell才是使用者和linux的互動介面。這個介面就是為了讓使用者高效、方便、靈活、強大的控制和使用liunx而存在的!如果是特殊的應用。login完全可以不調用shell!
  7. shell會調用一系列初始設定檔案:
    1. /etc/profile  --系統
    2. /etc/bashrc  --系統
    3. ~/.bash_profile  --user
    4. ~/.bashrc  --user
    5. ~/.bash_login  --user
    6. ~/.profle  --user
    7. ~/.bash_logout  --user logout

      bash的基本用法

      • bash顯示變數:echo $環境變數
      • bash設定變數:set 環境變數=值
      • bash倒出到系統變數:export 環境變數=值
      • bash以當前shell環境執行一個指令碼,通常用於設定當前shell的環境變數:source【.】 指令碼
      • bash解釋輸入的順序:命令空白..參數..斷行符號。命令的優先順序:
      1. 別名
      2. bash的編程關鍵字
      3. 函數
      4. 內建命令
      5. 外部命令
      • bash的內建命令:help 獲得內建命令的協助
      • bash的內建命令:type 獲得查詢命令的類型
      • bash的內建命令:buildin、enable、command管理內、外命令是否生效
      • bash命令執行狀態的返回變數:$?  通常:0.成功;127.命令未找到;>=128.程式錯誤終止
      • bash無條件執行多個命令:各命令以分號“;”分隔。執行的狀態為最後一個命令的返回狀態。如果想讓多個命令的輸出重新導向到檔案,需要把這些命令放到(命令1;命令2;  )> out.txt 內,最後的命令必須加空格
      • bash依賴條件執行多個命令:各命令以“&&”分隔,前邊的執行成功才執行後邊的
      • bash依賴條件執行多個命令:各命令以“||”分隔,前邊的執行失敗才執行後邊的
      • bash後台執行命令:在命令後加上“&”。注意,如果該命令有螢幕輸出就不好了,需要重新導向到其他才不會影響前台的輸入等
      • bash終止當前啟動並執行程式的執行:ctrol+c 或 ctrol + \
      • bash將當前啟動並執行程式放到後台以作業的形式運行:ctrol+z,注意這樣實際上在後台上掛起的狀態。$!變數獲得最後放入背景作業的進程pid
      • bash作業管理:
         
      •  

        •  

          • ctrol+z  --後台掛起;  命令&  --後台運行
          • jobs  --列車所有後台作業。 -r 正在啟動並執行 ;-s 掛起的;%n 作業號;%name 作業名 ;%?name 含有name的作業; %+ 當前作業;%% 當前作業;%-上一個作業
          • bg  --執行後台作業
          • fg  --將後台作業放到前台執行
          • stop  --掛起後台作業
          • stty tostop  --如果後台作業有終端輸出,則掛起
          • kill  --終止後台作業
          • wait  --等待後台作業及其傳回值
      • bash使用tab鍵自動完成命令 或 檔案名稱
      • bash命令曆史功能:預設放在~/bash_history下。history內建命令顯示記錄。fc命令可以查看、執行曆史命令;“!!”可以執行最後曆史命令;“!n” 執行指定行號的曆史命令;“!name”執行以name開頭的最後執行的曆史命令


        bash編程

        一:變數

        1. declare 或 直接賦值 的局部變數:declare var1=20  或  var2='as   df\df'
        2. export的全域變數:var1=sdaf   export var1 或 export var2=vdsf3
        3. 位置變數:$1 ---- $n
        4. 特殊預定於變數:$0--當前進程的檔案名稱   $$--當前進程的spid  $#--位置參數的個數   $!--後台最後執行的作業的作業號    $?--上一程式的執行狀態  $@--全部位置參數--原樣的參數列表   $*--全部位置參數--內部用單引號括起來的一個字串  
        5. 其他預定於的環境變數:$UID  $PWD  $PATH...........
        6. 變數擴充:雖然 $vars可能會——變數和周圍文本通過空白分隔了——正確的工作,但${vars}總能正確的工作
        7. unset:刪除環境變數,不能刪除唯讀環境變數
        8. readonly var=值:定義唯讀環境變數。注意:唯讀意思是可以修改值,但不能unset環境變數
        9. 命令替換:反單引號方式`ls ` $(ls ) 方式

        二:注釋及魔數

          #  --行注釋

          #!/bin/bash  --魔數

        三:進階變數擴充:參數變數的替換

        1. ${v1-v2}  --如果v1沒義或為空白有定,v2替換v1,v1不會被更改  --定義預設值
        2. ${v1+v2}  --如果v1沒義或為空白有定,不做任何處理,否則v2替換v1,v1不會被更改  --強制使用預設值
        3. ${v1=v2}  --如果v1沒義或為空白有定,v2替換v1,v1被更改為v2。--注意因為更改v1,這種用法被能用於位置參數
        4. ${v1?v2}  --如果v1沒義或為空白有定,非互動模式下:類似於${v1-v2},但bash有標準錯誤輸出;互動模式下:bash提示錯誤v1需要定義,提示內容為v2,並退出shell執行!
        5. ${var##*str}  --開頭長變數截去
        6. ${var#*str}  --開頭短變數截去
        7. ${var%%str*}  --末尾長變數截去
        8. ${var%str*}  --末尾短變數截去
        9. ${var/pattern}  --開頭模式比對刪除。可以通過在pattern上加上“#、%”來明確指示是開頭還是結尾刪除
        10. ${var//pattern}  --模式比對刪除
        11. ${var/pattern/replace}  --模式比對替換
        12. ${var//pattern/replace}  --模式比對替換
        13. ${var:startpos:length}  --截取指定位置和長度的字串,開始位置、長度均可省略,預設為0或1、到末尾

        四:條件測試運算式

        數值測試,複合模式下,可以使用c的文法和運算子

        • -eq 等於  --注意和字串比較的 “=”類似
        • -ne 不等於  --注意和字串比較的 “!=”類似
        • -gt 大於
        • -lt 小於
        • -ge 大於等於
        • -le 小於等於
        • ...
        • ...

        字串比較:注意雙引號引用的使用

        • = 等於
        • ==萬用字元比較
        • != 不等於
        • >
        • <
        • -z字串  字串長度等於0
        • -n字串  字串長度大於0

        檔案測試

        • -e檔案名稱  檔案存在
        • -r檔案名稱  檔案存在且可讀
        • -w檔案名稱  檔案存在且可寫
        • -x檔案名稱  檔案存在且可執行
        • -s檔案名稱  檔案存在且至少有一個字元
        • -S檔案名稱  檔案存在且是通訊端
        • -d目錄名  檔案存在且目錄存在
        • -f檔案名稱  檔案存在且普通檔案
        • -c檔案名稱  檔案存在且字元檔案
        • -b檔案名稱  檔案存在且塊檔案
        • -p檔案名稱  檔案存在且是管道檔案
        • -L|-h檔案名稱  檔案存在且是符號連結檔案
        • -N檔案名稱  檔案自最後讀取後發生修改
        • file1 -nt file2 file1 比 file2 檔案新
        • file1 -ot file2 file1 比 file2 檔案舊
        • file1 -ef file2 file1 是否是 file2 的硬串連

        符合運算子

        • test express 內建命令測試 等同於 [express]  --不能屏蔽特殊字元如>、 <、 \、 (、) 等等
        • [express] 內建命令測試 等同於 test express   --不能屏蔽特殊字元如>、 <、 \、 (、) 等等
        • [[express]] 字串複合運算子運算式,指出萬用字元比較。
        • ((express)) 算數複合運算子運算式 可以使用類似於c的文法
        • let express 算數運算賦值測試內建命令

         

        五:數值計算運算式

          $((express))  或 $[express]

         

        六:基本流程式控制制語句。這些語句的關鍵字必須放在不同的行

        if 條件測試

        then

        命令

                   elif [condition]

                   then

                     命令

        else

        命令

        fi

         

        for 變數 [in 列表]  --注意這裡的“變數”是迴圈控制變數

        do

        若干命令

        done

        例子1:

        for myfile in /etc/r*   /var/lo*  ${ORACLE_HOME}/*

        do

          if [-d "$myfile"]

          then

            echo "$myfile is (dir)"

          else

            echo "$myfile is (file)"

          fi

        done

        例子2:

        #! /bin/bash

        for param in "$@"

        do

          echo "$param"

        done

         

        while|until  --區別在於while當“若干命令1”最後執行的狀態為真時執行迴圈,until反之

        若干命令1

        do

        若干命令2

        done

         

        case string in

        exp1)

          若干命令1

        ;;

        exp2)

          若干命令2

        ;;

        .........

        *)

          其他命令

        esac

         

                  breake 和 continue

        七:函數。函數實際上是一組程式,是shell指令碼程式的一部分

          注意:bash的函數中定義的變數即是shell全域變數,所以必須注意變數的使用。可以通過在函數內定義的變數聲明為local來避免對函數外部全域變數的影響!

        functionname

          local var=值

          若干命令

        函數的調用:functionname param1 param2 ...

        shell將會自動將這些參數傳給位置變數$1 $2 .... $# $*

         

        八:命令分組

          (命令) --shell開啟新的子shell進程調用命令

          {命令} --shell以管道的方式從自身的shell進程中運行命令

        九:bash的執行和調試

          執行:bash 指令檔 或 將指令檔設定為可執行

          調試:bash 選項 指令檔。常用的調試選項

        • -n  --讀入命令但不執行
        • -u  --如果變數未設定,則認為程式錯誤
        • -v  --讀入shell的輸入行時顯示出來
        • -x  --執行shell命令時,顯示命令及其參數
        • 在shell程式內使用echo等內部命令輸出變數及中間結果

        十:bash中特殊的函數、語句、其他

        dirname 和 basename 是字串函數

        標識不同進位的數值:base#數字記號  --如 八進位057、 16進位0x23a、2進位2#0101、30進位30#12b

         

         

         

         

        相關文章

        聯繫我們

        該頁面正文內容均來源於網絡整理,並不代表阿里雲官方的觀點,該頁面所提到的產品和服務也與阿里云無關,如果該頁面內容對您造成了困擾,歡迎寫郵件給我們,收到郵件我們將在5個工作日內處理。

        如果您發現本社區中有涉嫌抄襲的內容,歡迎發送郵件至: info-contact@alibabacloud.com 進行舉報並提供相關證據,工作人員會在 5 個工作天內聯絡您,一經查實,本站將立刻刪除涉嫌侵權內容。

        A Free Trial That Lets You Build Big!

        Start building with 50+ products and up to 12 months usage for Elastic Compute Service

        • Sales Support

          1 on 1 presale consultation

        • After-Sales Support

          24/7 Technical Support 6 Free Tickets per Quarter Faster Response

        • Alibaba Cloud offers highly flexible support services tailored to meet your exact needs.