天天看點

Linux系統Bash(Shell)基礎知識(1)

  上篇博文為大家介紹了關于shell程式設計的的一些特性,即指令别名,指令曆史,快捷鍵,指令補全,指令行展開,指令執行結果,轉義字元,通配符,IO重定向,管道等操作;這次繼續給大家介紹關于shell程式設計的另一大特性——變量;

  shell程式中采用變量存放字元串,shell變量比C語言中的變量簡單得多,沒有衆多存儲類及類型的限制,也不需要預先定義,然後才能指派,可以在使用時“邊定義,邊指派”。

  shell有三類變量,環境變量,臨時變量以及本地變量,環境變量是永久形變量,不會随着shell腳本的結束而消失,而臨時變量是shell程式内部定義的,其适用範圍僅限于定義它的程式,出了本程式後便不能使用;

  程式=指令+資料

  資料:檔案系統中管理的那些檔案,存儲在記憶體裡的資料稱之為變量

  變量:一段連續的記憶體空間;為這一段記憶體空間取名為變量名;在這段記憶體空間中所存儲的裝置稱為 變量值;

  =:指派操作符

  指派方法:VARNAME=VALUE(中間不加空格)

  變量名=字元串

  例如

  myfile=/usr/meng中的myfile是變量名,=是指派号,字元串/usr/meng是賦予變量的值。在等号兩邊是沒有空格的;

  VARNAME的命名規範:

  1.隻能以字母或下劃線”_”開頭,不能使用數字,後面可以是任意字母數字和下劃線;

  2.大小寫嚴格區分;

  3.見名知意;

  4.書寫規範

  1)   全大寫:FILES

  2)   駝峰式:MyFile(每一個單詞的開頭為大寫)

  5.不能與已知變量名相同(否則相當于替換已有變量名)

  根據不同的程式設計語言,變量可以分為兩類:

  強變量:

  必須要在使用前先聲明,而且要聲明變量的類型;嚴格區分變量的類型;

  弱變量:可以随時使用随時聲明,甚至可以不聲明即使用;不對變量類型做硬性要求,如果沒有指明變量類型,統一按照字元型對待;

  bash的變量即為弱變量;

  c c++java等均為強變量;

  引用變量的值:$(VARNAME)-->$VARNAME(有些特殊的場景必須寫花括号)也稱為變量替換;

  在程式中使用變量的值時,要在變量名前面加上一個$字元,他告訴shell,要進行變量值替換;

  例

  #dir=/usr/meng

  #echo $dir

  #/usr/meng(顯示結果)

  指令替換:

  以兩種形式可以将一個指令的執行結果指派給變量。

  一種形式是:

  #VARNAME=`指令表`

  $dir=`pwd`

  另一種形式:

  #VARNAME=$(指令表)

  $dir=$(pwd) 

  bash的變量種類:

  全局變量(環境變量):主要指作用範圍,作用範圍是整個shell程序,包括其子shell;

  本地變量:作用範圍僅僅隻是登陸的shell;不包括子shell;

  局部變量:作用範圍僅僅隻是目前的程式段一般用于函數;

  預設全局變量:

  位置參數變量:表明這個程式所調用程式的位置;$1,$2,$3。。。$n

  特殊變量:

          $?,$$,$#,$@,$*…

  $?:展開為最近一次所執行指令的狀态傳回值(退出狀态)

  $#:位置參數的個數(以十進制表示);

  $*:從1開始連續編寫所有的位置參數,當時用雙引号來展開時,它展開為以特殊變量“IFS”的第一個字元分隔得值;用其顯示的内容是很多個不同的值;

  $@:從1開始連續編寫所有的位置參數,當時用雙引号來展開時,它展開為一個單獨的字元串;

  $$:展開為目前shell的程序辨別符;

  $0:展開為shell或shell腳本的檔案名;

  #echo$0

  -bash

變量的使用:

     變量的指派:VARNAME=‘VALUE’(屬于本地變量)

   撤銷變量:#unset VARNAME

   聲明環境變量:

            export VARNAME(導出,可以給所有子shell應用)

            export VARNAME=VALUE

     例

            [wjq@localhost ~]$ exportb='hello'

            [wjq@localhost ~]$ echo $b

            hello

            [wjq@localhost ~]$ bash

            [wjq@localhost ~]$

    declare:

          -a:聲明索引數組(如果支援)

          -A:聲明關聯數組(如果支援)

        -i:聲明整形變量;

          -l:聲明變量并将變量值轉換為小寫字母;

          -u:聲明變量并将變量值轉換為大寫字母;

          -x:聲明變量并将其導出為環境變量(全局變量);

          -r:設定隻讀變量,且無法使用unset撤銷,隻能關閉bash;

       例

[wjq@localhost ~]$ declare-l s='HELLO'

[wjq@localhost ~]$ echo $s

hello

[wjq@localhost ~]$ declare-u s='hello'

HELLO

檢視環境變量:

set:

export:

env:

聲明局部變量:

local VARNAME=VALUE(用于函數,僅僅隻在函數的代碼段中有效,當函數調用完畢則失效)

配置檔案:

       通用配置檔案:/etc/bashrc,/etc/profile

       私人配置檔案:~/.bashrc,~/.bash_profile

               将變量放入配置檔案中才是永久生效的;

       注意:一般定義變量都是先做先用,并不需要改配置檔案,如果修改聲明變量,有可能會造        成系統漏洞,得不償失,是以沒有不要就不要改; 

本文轉自 wujunqi1996 51CTO部落格,原文連結:http://blog.51cto.com/12480612/1911150

繼續閱讀