Linux學習筆記:bash顏色顯示及shell指令碼相關

來源:互聯網
上載者:User

標籤:應用程式   設定檔   profile   執行檔案   


bash的顏色顯示規則:

  ASCII編碼對於顏色進行設定:


  \033 :ctrl鍵

  [:控制字元和顏色代碼之間的佔空間字元

  0m:關閉顏色屬性的命令;

  1m:對於顯示文本字元加粗

  4m:為文本字元加底線標識

  5m:使文本字元閃爍

  7m:將文本字元的背景色和前景色彩切換顯示器;

  8m:將文本字元的背景色和前景色彩設定為相同顏色。


  30m-39m:設定文本字元的前景色彩;38m和39m暫時沒用

  40m-49m:設定文本字元的背景色;48m和49m暫時沒用


一個完整的程式,一般包含四類檔案:

  二進位檔案(可執行檔)、頭和庫檔案、協助檔案、設定檔;


bash——CLI(命令列介面)的一種

  bash同樣屬於完整的應用程式,也有這四類檔案:


  bash的設定檔:

    三類:

      profile類:

        為互動式登入的shell進程實現功能初始化的設定檔;

      bashrc類

        為非互動式登入的shell進程實現功能啟動配置的設定檔;

      logout類

        為互動式登入的shell進程提供終止及清理類功能的設定檔;


  shell的類型;

    互動式登陸的shell:

      1.直接通過某個終端輸入帳號和密碼後登陸開啟的shell進程;

      2.使用su - USERNAME或su -l USERNAME執行切換登陸開啟shell進程;


    非互動式登陸的shell:

      1.在圖形介面下,通過菜單或右鍵菜單開啟的終端的SHELL進程;;

      2.使用su USERNAME執行切換登陸開啟的shell進程


bash的設定檔:

  profile類:

    全域:對所有使用者都生效的設定檔;

      /etc/profile

      /etc/profile.d/*.sh


  注意:在RHEL或Centos系列的作業系統中,通常情況下,如果一個設定檔的內容很多,格式複雜




    使用者個人的設定檔:僅僅只是針對使用者有效設定檔;

      ~/.bash_profile


    profile類配置的檔案的作用:

      1.用於定義使用者的環境變數;

      2.用於運行指令碼或執行命令;


  bashrc類:

    全域:

      /etc/bashrc

    使用者個人:

      ~/.bashrc


    bashrc類配置的檔案的作用:

      1.用於定義本地變數;

      2.用於定義命令的別名;

      3.定義umask;


  注意:只有超級使用者root可以修改全域類的設定檔;普通使用者只能修改其家目錄中的個人設定檔;


互動式登入的shell進程,會按照順序載入下列設定檔;

  /etc/profile --> /etc/profile.d/*.sh --> ~/.bash_profile --> ~/.bashrc --> /etc/bashrc


非互動式登陸的shell進程,會按照順序載入下列設定檔;

  ~/.bashrc --> /etc/bashrc --> /etc/profile.d/*.sh


所有在命令列中執行的命令的操作,只要沒涉及到檔案的修改的,一般都只是針對當前的shell生命週期有效;只要shell進程結束,所有的設定均失效;


設定檔的作用:使得我們賴以生存的配置資訊可以長期有效,只要不修改設定檔中的內容,每一次開啟shell都會使曾經的配置生效;



讓設定檔中新定義的配置能夠立即生效的方法:

  1.source命令:

    source /PATH/TO/SOME_CONF_FILES

    . /PATH/TO/SOME_CONF_FILES


  2.exec命令:

    exec /PATH/TO/SOME_CONF_FILES


bash中變數中存放的字串處理方式:

  弱變數:

    1.無需事先定義即可使用。

    2.沒有VARIANT 資料型別的硬性要求,預設是字串;


1.字串切片:

  ${#VAR}:返回字串類型的變數VAR的長度;

  ${VAR:offset}:返回字串變數VAR中第offset個字元後面的內容,不包括第offset個字元;offset的取值範圍為:0~$[${#VAR}-1]

  ${VAR:offset:number}:返回字串變數VAR中從第offset個字元後開始,長度為number的字元部分;

  ${VAR: -length}:取字串最右側的length個字元;


2.基於模式取字串:

  ${VAR#*PATTERN}:自左而又,尋找VAR變數所儲存的字串中,第一次被PATTERN匹配的字元,刪除從字串開始到PATTERN匹配的字元之間的所有字元。

  ${VAR##*PATTERN}:自左而又,尋找VAR變數所儲存的字串中,所有被PATTERN匹配的字元,刪除從字串開始到最後一個PATTERN匹配的字元之間的所有字元。

  

  ${VAR%PATTERN*}:自右向左,尋找VAR變數所儲存的字串中,第一次被PATTERN匹配的字元,刪除從字串結尾到PATTERN匹配的字元之間的所有字元。

  ${VAR%%PATTERN*}:自右向左,尋找VAR變數所儲存的字串中,所有被PATTERN匹配的字元,刪除從字串結尾到最後一個PATTERN匹配的字元之間的所有字元。


3.尋找替換:

  ${VAR/PATTERN/SUBSTRING}:在VAR變數中尋找匹配PATTERN的內容,將其第一個匹配到的結果更換為SUBSTRING.

  ${VAR//PATTERN/SUBSTRING}:在VAR變數中尋找匹配PATTERN的內容,將其所有的匹配到的結果更換為SUBSTRING.


  ${VAR/#PATTERN/SUBSTRING}:在VAR變數中尋找行首匹配PATTERN的內容,將匹配的結果更換為SUBSTRING。

  ${VAR/%PATTERN/SUBSTRING}:在VAR變數中尋找行尾匹配PATTERN的內容,將匹配的結果更換為SUBSTRING。


4.尋找刪除:

  ${VAR/PATTERN}:在VAR變數中尋找匹配PATTERN內容,將第一個結果刪除。

  ${VAR//PATTERN}:在VAR變數中尋找匹配PATTERN內容,將第一個結果刪除。


  ${VAR/#PATTERN}:在VAR變數中尋找匹配PATTERN內容,將行首匹配到的結果刪除。

  ${VAR/%PATTERN}:在VAR變數中尋找匹配PATTERN內容,將行尾匹配到的結果刪除。


5.大小寫轉換:

  ${VAR^^}:小寫變大寫

  ${VAR,,}:大寫變小寫


6.變數賦值:

  ${VAR:-value}:如果變數VAR為空白或未被設定,那麼直接返回value的值,否則返回變數VAR的值。

  ${VAR:+value}:如果變數VAR不為空白,那麼返回value的值

  ${VAR:=value}:如果變數VAR為空白或未被設定,那麼直接返回value的值,並且將value的值賦給變數VAR,否則返回變數VAR的值


7.變數的間接引用:

  如果第一個變數的值恰好是第二個變數的變數名,從第一個變數引用第二個變數的值的方法,就稱為間接變數引用。

  VAR1=VAR2

  VAR2=value

  bash提供了兩種格式的間接變數引用方法:

    eval MYVAR=\$$VAR1 ==> \$VAR2

    MYVAR=$(!VAR1)


數組


變數:記憶體的儲存空間;

變數的特點:每個變數中只能存放一個資料,變數只能進行一次性的賦值。


存放本班每個人的名字於變數:

  1.一次性賦值:

    NAME="name1 name2 name3....."

  2.使用多個變數,分別賦值:

    NAME1=XXX

    NAME2=OOO

  3.陣列變數:


數組:存放一個或多個元素的連續的記憶體空間,相當於多個變數的集合。

數組元素:數組中任何一個存放資料的儲存單元;

數組的索引:

  1.數字:索引數組(Index ARRAY)

    0,1,2......

  2.名稱(字串):關聯陣列 

    bash4.0以上的版本才支援;


稠密數組和稀疏數組:

  稠密數組:索引編號必須連續

  稀疏數組:索引編號可以不連續,bash數組屬於此類;


聲明數組:

  1.declare命令:

    declare -i NAME:將NAME聲明為整型變數;

    declare -x NAME:將NAME聲明為環境變數;


    declare -a NAME:將NAME聲明為索引數組;(如果支援)

    declare -A NAME:將NAME聲明為關聯陣列;(如果支援)


  2.直接聲明數組:

    直接為數組賦值:

      ARRAY_NAME=("valuel" "value2" "value3"....)聲明稠密數組;

      ARRAY_NAME=([0]="valuel" [1]="value2" [2]="value3"....)聲明稀疏數組;

      

  3.定義數組的元素而建立數組:

    ARRAY_NAME[0]=value1

    ARRAY_NAME[1]=value2

    ARRAY_NAME[2]=value3

    ......


引用數組中元素:

  引用變數的方法:${NAME}

  引用數組元素的方法:${ARRAY_NAME[INDEX]}

    注意:如果不給出INDEX,則表示引用數組的第一個元素,即INDEX=0的元素;

  引用整個數組的所有元素:${ARRAY_NAME[*]}或者${ARRAY_NAME[@]}

  引用數組的索引:${!ARRAY_NAME[*]}或者${!ARRAY_NAME[@]}


查看數組的長度(數組中有效元素的個數)

  ${#ARRAY_NAME[*]}或者${#ARRAY_NAME[@]}


數組切片:

  ${ARRAY_NAME:offset}:顯示包括offset數字所表示的索引位置及以後的所有元素。

  ${ARRAY_NAME:offset:number}:顯示包括offset數字所表示的索引位置及以後的number個元素;


向數組中追加元素:

  1.稠密數組:

    ARRAY_NAME[${#ARRAY_NAME[*]}]=valueN


  2.稀疏數組:

    ARRAY_NAME[INDEX]=valueN

      注意:INDEX必須為未被使用的數組元素索引編號;


撤銷數組:

  unset ARRAY_NAME


刪除數組中的元素:

  unset ARRAY_NAME[INDEX]


RANDOM變數:0-32767  

  熵池

  /dev/random

  /dev/urandom


bash指令碼編程:


shell指令碼編程的特點:

  過程式程式設計語言

  指令碼類語言

  解釋型語言


過程式程式設計語言:

  順序執行結構

    以從左至右,從上而下順序執行所有語句(命令);

    shell指令碼的主體結構


  選擇執行結鉤

    依照給定條件的邏輯判斷結果,進而選擇某個分支中的語句來執行;

    if:分支選擇標準;邏輯判斷的結果;

    case:分支選擇標準,根據可選的取值


  迴圈執行結構

    對於某特定操作特定語句,重複執行0次,1次或多次;

    for:遍曆指定的列表;

    while:根據邏輯判斷的結果

    until:根據邏輯判斷的結果

    select:永遠的死迴圈,利用迴圈機制提供挑選清單;



選擇執行結構:

  if語句:

    if: if 命令; then 命令; [ elif 命令; then 命令; ]... [ else 命令; ] fi

    根據條件執行命令。


  if語句單分支結構:如果條件為真,則執行then後面的語句,否則,不做任何操作。

    if CONDITION

    then STATEMENT

    fi


    if CONDITION ;then

      STATEMENT1

      STATEMENT2

      ...

    fi


  注意:想要執行then後面的語句,前提條件是CONDITION部分為真;


  if語句的雙分支結構:如果條件為真,就執行then後面的命令,否則就執行else後面的命令;

    if CONDITION;then

      STATEMENT

      ...

    else

      STATEMENT

    fi


  if語句的多分支結構:首先判斷CONDITION1是否為真,如果為真,就執行第一個then後面的語句,否則判斷第二個CONDITION2是否為真,如果為真,就判斷第二個then後面的語句。。。。。如果所有CONDITION都為假,就執行else後面的語句。

    if CONDITION1 ; then

      STATEMENT

      ...

    elif CONDITION2 ; then

      STATEMENT

      ...

    elif CONDITION3 ; then

      STATEMENT

      ...

    ...

    else 

      STATEMENT

      ...

    fi

  建議:if多分支結構,能不用就不用。



bash指令碼編程之使用者互動:

  位置參數變數:$1,$2,$3... 

  特殊變數:

    $#:所有位置參數的總和;

    $*:給出的所有位置參數的列表;當使用雙引號引用時,整個參數列表被當做一個字串;;

    [email protected]:給出的所有位置參數的列表,當使用雙引號引用時,每個參數作為單獨的字串存在。

    $0:所執行的指令檔自身的路徑


read命令:

read[-a 數組] [-d 分隔字元] [-i 緩衝區文字] [-n 讀取字元數]   [-p 提示符] [-t 逾時] [名稱 ...]

名稱一般為變數名或數組名,如果不寫名稱,則系統會將read讀到的資訊儲存在REPLY變數中;


  shift [n]

    移位位置參數。



繪製流程圖



if語句多分支結構:

  if CONDITION1 ;then

    STATEMENT

    ...

  elif CONDITION2 ;then

    STATEMENT

    ...

  elif CONDITION3 ;then

    STATEMENT

    ... 

  ...

  else

    STATEMENT

    ...

  fi



迴圈執行結構:

  將一段代碼重複執行0次、1次、或多次;

  一個好的迴圈結構必須要包括兩個最重要的環節;

    進入迴圈的條件:

      開始迴圈時所滿足的條件;

    退出迴圈的條件:

      迴圈結束所滿足的條件;


  bash指令碼:

    for

    while

    until

    select


for迴圈:

  1.遍曆列表

  for: for 變數名 in 列表 ; do 

   迴圈體 

  done

    

    變數名:任意指定的變數名稱,變數的值是從列表中取值並賦值的;

    迴圈體:一般來說是能夠用變數名的命令或命令的組合,如果迴圈體中沒有包括變數名,則可能出現死迴圈

    列表的產生方式:

      1)直接給出

      2)純整數列表

        seq:輸出一個整數列表

          seq [FIRST [INCREMENT]] LAST

      3)花括弧展開

        {FIRST .. LAST}

      4) 命令的執行結果的傳回值

5) GLOBBING

6) 某些變數的引用:[email protected], $*



    for迴圈的特點:

      1.幾乎不會出現死迴圈;

      2.在執行迴圈的過程中需要將整個list載入記憶體,因此對於大列表來說可能會過多的消耗記憶體和CPU資源 

  

  2.控制變數

for (( 運算式1; 運算式2; 運算式3 )); do 命令; done


for (( 運算式1; 運算式2; 運算式3 )) ; do

迴圈體

done


運算式1:為變數賦初始值;

運算式2:迴圈的允出準則;

運算式3:變數值的變化規律;


Linux學習筆記:bash顏色顯示及shell指令碼相關

相關文章

聯繫我們

該頁面正文內容均來源於網絡整理,並不代表阿里雲官方的觀點,該頁面所提到的產品和服務也與阿里云無關,如果該頁面內容對您造成了困擾,歡迎寫郵件給我們,收到郵件我們將在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.