bash功能特性一 變量

一、什么是shell

    shell是為了使用戶能夠操作應用程序的接口程序。如經常使用的圖形界面及命令行界面都是shell。下面來介紹一下bash這個shell的功能。

二、變量的概念

    被命名的內存空間即為變量,Linux中內置了許多變量,我們可以通過修改這些變量的值還制定用戶自己的bash環境。

    1、顯示變量

1.png

    使用echo命令來讀出變量的內容,PATH是變量的名稱,在前面加上$表示讀取變量的內容,否則只會顯示字串本身,如下所示;

2.png

    也可以使用下面的方式來讀取變量的內容;

3.png

    2、設置自定義變量

        我們也可以自己來設置自定義變量,通過“=”號即可實現;

4.png

    3、取消變量

8.png

三.變量的類型

    Linux存在多種不同類型的變量,下面逐一介紹。

    1、本地變量

        只對當前shell進程有效,對其它shell進程和當前shell進程的子進程無效的變量;

5.png

        變量的設置規則:

            變量的命名應遵循以下原則:

                1、只能包含字母語、數字和下劃線,并且不能以數字開頭;

                2、不應該跟系統中已有的環境變量重名;

                3、最好做到見名知義;

            變量中的引用:

                   "":弱引用,里面的變量會被替換;

6.png

                   '':強引用,里面的所有字符都是字面量,直接輸出;

7.png

    2、環境變量

        環境變量是Linux系統中內置的變量,用于幫助用戶設置提示符、文件查找的路徑、語系等功能;環境變量作用于當前shell進程及其子進程,對其它的shell無效。

        1)查看當前系統上的環境變量

            (1)用evn查看環境變量

1.png

            上面的結果中有些常用的環境變量說明如下:

                HOSTNAME:主機名;

                SHELL:當前環境中使用的shell程序;

                HISTSIZE:記錄歷史命令的條數,默認為1000;

                USER:當前用戶名;

                MAIL:當前用戶的郵箱路徑;

                PATH:命令查找路徑;

                LANG:當前語系設置;

                HOME:當前用戶的家目錄。

            (2)使用export命令查看環境變量

2.png

            (3)使用printenv命令查看環境變量

3.png

            (4)使用set命令查看所有變量        1.png

            (5)將自定義變量轉換成環境變量  

             腳本在執行時會啟動一個子shell進程,而父進程就會處于睡眠狀態,等子進程執行完成后再回到父進程繼續執行;父進程處于睡眠狀態時,子進程不會繼承父進程的本地變量,只會繼承環境變量,所以必須將腳本中涉及到的本地變量轉換成環境變量才能順利執行。

                使用export命令來導出自定義變量為環境變量;

5.png

                也可直接使用export命令來直接定義環境變量;

6.png

            (6)修改環境變量

                在命令行修改環境變量并不能永久生效,一旦退出shell修改就會失效。

                與自定義變量的定義方式相同,可以直接為環境變量賦值;

1.png

                也可以在環境變量后面追加內容; 

2.png

                自定義提示符  

3.png                 PS1定義了當前shell中的提示符信息,參數含義如下:

                    \u:當前用戶名

                    \h:主機名

                    \H:FQDN,完整格式主機名

                    \w:當前工作目錄的基名

                    \W:當前工作目錄的絕對路徑

                    \$:提示符

                    \t:顯示時間

1.png

    3、局部變量

        對shell腳本中某代碼片斷有效:通常用于函數本地;

        定義方法:local VARNAME=VALUE

    4、位置變量

        $1,$2,…,${10}

    5、特殊變量

        $?:上一個命令的執行狀態返回值

 

       $#:參數個數

       $*:參數列表

       $@:參數列表

    6、只讀變量:

        readonly VARNAME

四、變量的刪除與替換

    將路徑賦值到變量p中;

1.png

    ${variable#word}:在variable中存儲字串上,自左而右,查找第一次出現的word,刪除字符開始至此word處的所有內容;

2.png

    上面的結果表示從左向右查找第一次出現的/,并將其刪除;              

    ${variable##word}:在variable中存儲字串上,自左而右,查找最后一次出現的word,刪除字符開始至此word處的所有內容;

3.png

    上面的結果表示從左向右查找最后一次出現的/,前面的*代表任何字符;              

    ${variable%word}:在variable中存儲字串上,自右而左,查找第一次出現的word,刪除word開始到尾部的所有內容;

4.png

    上面的結果表示從右向左查找第一個/,并將其后面的內容刪除;              

    ${variable%%word}:在variable中存儲字串上,自右而左,查找最后一次出現的word,刪除word開始到尾部的所有內容;

5.png

    上面的結果表示從右向左查找最后一個/s,并將其后面的內容刪除。

    變量的查找替換:

       ${variable/pattern/substi}:將變量中第一次出現的pattern替換為substi;

1.png

        將第一次出現的123替換為321;

2.png

       ${variable//pattern/substi}:將變量中出現的所有的pattern替換為substi;

3.png

       ${variable/#pattern/substi}:將變量中位于行首的pattern替換為substi;

4.png

       上面的變量并沒有被替換,因為23并是位于行首的字符;

5.png

       從上面的結果看出只替換了行首的字符;

       ${variable/%pattern/substi}:將變量中位于行尾的pattern替換為substi;

6.png

              pattern可以使用globbing中的元字符:*,?

7.png

    變量的查找刪除:

       ${variable/pattern}:刪除pattern第一次匹配到的字符串;

8.png

       ${variable//pattern}:刪除pattern所有匹配到的字符串;

9.png

       ${variable/#pattern}:刪除pattern匹配到的行首的字符串;

10.png

       ${variable/%pattern}:刪除pattern匹配到的行尾字符串;

11.png

    大小寫轉換:

       小寫轉大寫:${variable^^}

12.png

       大寫轉小寫:${variable,,}

13.png

    變量賦值操作:

        ${parameter:-word}:如果parameter為空或未定義,則返回為“word";否則,返回parameter的值;

14.png

        因為變量p有值,直接顯示變量p的的內容;

15.png

        將變量p撤消,即顯示表達式后面的內容;

        ${parameter:+word}:如果parameter為空或未定義,則不做任何操作;否則,返回word的值;

16.png

        此表達式正上面的正好相反,將變量p賦值后顯示表達式后面的字符,即tt;

        ${parameter:=word}:如果parameter為空或未定義,不但變量返回"word";而且將parameter賦值為word;

17.png

        變量p中有值時,直接顯示變量p的值,變量p不存在時,將tt賦值給變量p;

        ${parameter:offset:length}:如果將parameter偏移offset個字符,并截取length長度的字符

18.png

        在上面的表達式中,設置了偏移3個字符,即從第4個字符開始顯示,截取2個字符,所以結果為45;

        ${parameter:?word}:如果parameter為空或未定義,則將word做為錯誤信息顯示,否則顯示parameter的值;

19.png

        為腳本使用配置文件,并確保某變量有可用值的方式:

             variable=${variable:-default vaule}

原創文章,作者:petmaster,如若轉載,請注明出處:http://www.www58058.com/2894

(0)
petmasterpetmaster
上一篇 2015-04-19
下一篇 2015-04-20

相關推薦

  • Linux Cluster之keepalived及keepalived + LVS DR的實現

      一、HA Cluster基礎 系統可用性A=MTBF/(MTBF+MTTR) MTBF:平均無故障時間 MTTR:平均修復時間 降低MTTR的方式:冗余(redundent) 衡量標準:幾個9 90%、99%、99.9%… 提升系統可用性的辦法之一:降低MTTR 通過冗余(redundant)的方式能夠避免單點故障(SPoF),從而…

    2016-11-02
  • 第二周作業

    1、Linux上的文件管理類命令都有哪些,其常用的使用方法及其相關示例演示。     文件管理類命令:cp、mv、rm     (1)cp:復制命令      單源復制(源文件為文本文件)    &n…

    Linux干貨 2017-01-18
  • 排錯

    把/etc/inittab  模式改為6模式 怎么修復 1 先把 vim /etc/inittab 打開 2 把/etc/inittab 模式改為6 3 reboot 4 在倒計時完之前按任意鍵 5按A進入 6 在quiet  命令后面寫入 3  模式 重啟 7把 vim /etc/inittab 打開 8 把/etc…

    Linux干貨 2017-05-15
  • N22-妙手-第十周博客作業

    1、請詳細描述CentOS系統的啟動流程(詳細到每個過程系統做了哪些事情)     (1) POST階段         加電自檢,確保每個設備能正常工作     (2) BIOS  &nb…

    Linux干貨 2016-12-05
  • shell腳本之條件測試

    組合條件測試:在多個條件間實現邏輯運算     與:[ condition1 -a condition2 ]、condition1 && condition2     或:[ condition…

    Linux干貨 2015-08-24
  • LVS NAT + Keepalived HOWTO

    LVS NAT + Keepalived HOWTO   這篇文章主要講解了,基于LVS/NAT,安裝,運行與檢測keepalived 目錄     1、什么是keepalived?     2、規劃你的網絡 &nbsp…

    Linux干貨 2015-09-21

評論列表(1條)

  • stanley
    stanley 2015-04-20 21:48

    有圖有文,每個練習結果均有圖證,看得出其中的認真程度,贊。

欧美性久久久久