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 09:52
下一篇 2015-04-20 18:37

相關推薦

  • 馬哥教育網絡班22期+第9周課程練習

    week9: 1、寫一個腳本,判斷當前系統上所有用戶的shell是否為可登錄shell(即用戶的shell不是/sbin/nologin); 分別這兩類用戶的個數;通過字符串比較來實現; #!/bin/bash # SHELL1="/sbin/nologin" declare -i sum1=sum2=0 for&nb…

    Linux干貨 2016-10-17
  • Openssl加密解密原理+CA自建實現

     Openssl加密解密原理+CA自建實現     前言 互聯網的驚人發展使企業和消費者都感到非常興奮,它正改變著我們的生活和工作方式。但是,互聯網的安全程度如何——尤其是在通過它發送機密信息時的安全性——已經成為人們關心的主要問題。隨著時代的發展,加密原理也不斷地在更新換代. 數據的加密目前已廣泛地運用于戰爭,商業活…

    Linux干貨 2015-05-25
  • Linux 登錄趣事

    初入Linux運維,在虛擬機VMware12中裝載CentOS6和CentOS7,均帶有圖形化界面。簡單熟悉Linux,發現了一些關于登錄的趣事,在此與大家分享。 運行環境:CentOS6和CentOS7 工具:系統里的terminal 登錄趣事(以CentOS6為例): (1)自動登錄圖形化界面 每次啟動CentOS6,短暫等待之后便會進入登錄界面,然后選…

    2017-07-15
  • 集中練習6-bash腳本

    集中練習6-bash腳本

    Linux干貨 2017-12-05
  • 淺談Nginx(二)—http下server配置

    淺談Nginx(二)—http下server配置 此文介紹Nginx下的http模塊,著重介紹http模塊下的server服務 ——–依據”馬哥教育”主講人馬永亮導師的上課筆記整理——- 目錄  一. http相關的基本配置:     1)…

    系統運維 2017-02-07
  • AIX下NFS共享導致命令行輸入卡住

     1、事件描述:之前公司測試某廠商存儲一體機的NFS共享功能,將該NFS目錄共享給AIX主機使用(用于備份對應對應的數據庫,因為數據庫版本太老,Oracle8i的,不支持存儲廠商的備份代理),測試完成后,廠商將設備直接關機(這時候在AIX上掛載的NFS目錄沒有進行卸載)。然后,當我們登陸到AIX服務器上的時候,發現每次敲入“df -g”或者“ls”…

    Linux干貨 2016-07-07

評論列表(1條)

  • stanley
    stanley 2015-04-20 21:48

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

欧美性久久久久