bash變量類型及區別之淺談

變量類型,區別

位置變量$0 $1,$2,$# $@ $*

變量的類型:本地變量、環境變量、位置變量

本地變量:生效范圍為當前shell進程,對當前shell之外的其他shell進程包括當前shell的子進程均無效

環境變量:生效范圍為當前shell進程及子進程

位置變量:$1,…..$n,${10}來表示,用于放腳本在腳本代碼中調用通過命令行傳遞給它的參數



本地變量

變量賦值:name=‘value’,

可以使用引用value:

(1) 可以是直接字串; name=“root"

(2) 變量引用:name="$USER"

(3) 命令引用:name=`COMMAND`, name=$(COMMAND)

變量引用:${name}, $name

"":弱引用,其中的變量引用會被替換為變量值

'':強引用,其中的變量引用不會被替換為變量值,而保持原字符串

顯示已定義的所有變量:set

刪除變量:unset name

生效范圍為當前shell進程,對當前shell之外的其他shell進程包括當前shell的子進程均無效

如下圖:

blob.png

編輯一個本地變量:name=mage

echo $mage 可查詢變量

 

 blob.png

新開一個窗口再次查詢就不顯示了,這就是本地變量


blob.png

這里我們寫一個小腳本驗證一下,

第一行是:shell程序開頭的環境指定,這里我們用的是bash

第二行是:一些描述信息;本地變量測試腳本

然后定義var1=success

最后這行是為了方便我們下一步測試,讓它把這個變量輸出到屏幕上

blob.png

給它執行權限,然后用相對路徑運行,然后顯示出我們腳本里echo打印的信息;但是用echo $var1卻沒有。

So:本地變量只針對當前環境有效!




blob.png

我們再建立一個var2的腳本,將var1的變量也寫進去

blob.png

沒有顯示var1的變量。

So:本地變量只對當前環境有效


 

【環境變量】

生效范圍為當前shell進程及子進程

顯示所有環境變量:

export

env

printenv

?刪除:unset name

上面我們說過:本地變量只能在當前環境(shell)下使用,

環境變量就是在變量前聲明、賦值。加一個字符串:export

blob.png

用之前聲明就行

還有一種寫法:declare –x 等價于export

練習題:

編寫腳本/root/bin/backup.sh,可實現將/etc/目錄備份到/root/下生成etcYYYY-mm-dd

20160811 015.jpg

中間的是正文,其他為描述信息

blob.png

有了上下倆行輸出信息提示,我們再運行腳本的時候就明白這個腳本是否已經開始和結束了。



位置變量


位置變量:在腳本代碼中調用通過命令行傳遞給腳本的參數

$1, $2, …:對應第1、第2等參數,shift [n]換位置

$0: 命令本身

$*: 傳遞給腳本的所有參數,全部參數合為一個字符串

$@: 傳遞給腳本的所有參數,每個參數為獨立字符串

$#: 傳遞給腳本的參數的個數

$@ $* 只在被雙引號包起來的時候才會有差異


上題,如備份,用起來不靈活,如果我想要備份別的目錄呢?或者備份到別的地方呢?

 想要靈活就需要參數

blob.png

 

blob.png

新建f1腳本。 f1的參數作為f2的參數 一個用$*一個用$@。 當我們執行f1.sh腳本的時,f2.sh腳本會調用f1.sh后跟的參數。簡單講就是上一個腳本參數的調用。

結果如下圖:

 

 

blob.png

$1(引用第一個參數)打印出來的是全部

$2(引用第二個參數)打印出來的是空

因為$*調用的參數是一個整體(多個字符)

  所以第一個參數就是“a b c d”第二個參數自然就沒有了

 

$@調用的參數是單個參數(字符)

 

blob.png

當我們把$*$@的雙引號去掉后就沒區別了

為被雙引號引用時,所有的參數被認為是各個獨立的單詞

 

第十個參數怎么寫?

${10}如果寫成$10,系統會認為是$10的組合

blob.png

第十個參數是$10,然后結果是:a0

blob.png

 

blob.png

 

 blob.png

當加上大括號的時候就顯示正確了

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

(0)
cszdz123cszdz123
上一篇 2016-08-12
下一篇 2016-08-12

相關推薦

  • linux系統啟動流程及內核編譯

    Linux系統啟動流程 initialization [??n???la?'ze??n] 初始化 內核參數: /usr/share/doc/kernel-doc-VERSION/Documentation 系統初始化流程(內核級別): POST –> BootSequence(BIOS) –> BootLoade…

    Linux干貨 2016-09-19
  • 馬哥教育網絡班22期+第1周課程練習

    week1作業: 1.描述計算機的組成及其功能。    計算機的組成:    CPU:控制器、運算器、寄存器、CPU緩存(RAM,一級、二級、三級緩存)    控制器(Control):是整個計算機的中樞神經,其功能是對程序規 定的控制信息進行解釋,根據其要求進行控制,…

    Linux干貨 2016-08-15
  • linux軟件包管理

    linux軟件包管理 簡介     在Linux系統中,軟件包的安裝和管理是很重要的知識,而linux/unix一個麻煩的地方就是軟件安裝程序比較麻煩和復雜,尤其是當所安裝的軟件包要處理較多的包依賴關系,這就更讓人頭疼了,最常見linux軟件安裝方式有三種:     本文主要介紹Linux中RedHat或CentOS發…

    系統運維 2016-05-05
  • Linux 文本查看及處理工具&&用戶和組管理

    1、列出當前系統上所有已登錄的用戶的用戶名,注意:同一個用戶登錄多次,則只顯示一次即可。 ~]# who | cut -d ' ' -f 1 | sort -u 2、取出最后登入到當前系統的相關信息。 ~]# last&…

    Linux干貨 2016-10-05
  • 日志收集工具EFK之fluent部署手稿

    Edit EFK fluent部署安裝 1. 環境介紹 Centos 6.5 64bit 2. 安裝 td-agent介紹 fluent 考慮到靈活可擴展性,使用Ruby編寫,部分功能考慮性能使用C語言編寫。普通用戶安裝操作Ruby daemon還是有一定難度的??紤]到flunt的上手難度, fluent專門發布了穩定發布包,就也是所謂的td-agent. …

    Linux干貨 2016-03-24
  • Linux 第三天: (07月26日) Linux使用幫助

    Linux 第三天: (07月26日) Linux使用幫助         whatis 顯示命令的簡短描述makewhatis centos6 制作數據庫mandb centos7 制作數據庫 help COMMAND 內部命令man bash 內部命令COMMAND –help -h 外部命令man C…

    Linux干貨 2016-08-08

評論列表(1條)

  • 馬哥教育
    馬哥教育 2016-08-12 13:31

    有理論有實踐,圖文并貌,可以算是不錯的筆記,但是,我們寫博客是為了給別人看的,可以講解變量是什么,有哪幾類,各類變量的應用場景等。

欧美性久久久久