shell的變量功能

                                                       shell的變量功能

一、什么是變量

     變量是bash環境中非常重要的一個內容,那什么是變量呢?簡單說就是讓一某一個特定字符串來代表另一個比較復雜或者是容易變動的數據。

二、變量的顯示與設置:echo ,unset

1變量的顯示echo $變量   echo  ${變量}

 shell的變量功能

2.1變量的設置設置或者是修改某個變量的內容):用等號(=連接

變量與它的內容。

如:

shell的變量功能 

2.2變量的設置規則

1)變量與變量內容以一個等號“=”連接,如:

“myname=Vbird”

2)等號兩邊不能直接接空格符,錯誤示范如:

““myname=   Vbird”“myname=Vbird   Tsai”

3)變量名稱只能是英文字母與數字,但開頭字符不能是數字,錯誤示范如:

“2myname=Vbird”

變量命名規則如下:

a.不能使程序中的保留字:例如if, for

b.只能使用數字、字母及下劃線,且不能以數字開頭

c.見名知義

d.統一命名規則:駝峰命名法

4)變量內容若有空格符可使用雙引號” ” “或者單引號” ‘ “將變量內容結合起來:

a.雙引號內的特殊字符如$等,可以保持原本的特性,如:

shell的變量功能 

b.單引號內的特殊字符則僅為一般字符(純文本),如:

shell的變量功能 

5)可用轉義字符“\”將特殊符號(如$\、!)變成一般字符。

6、在一串命令中,還需要通過其他的命令提供的信息,可以使用反單引號“`命令`”或者“$(命令)”,如:

shell的變量功能 

7、若該變量為了增加變量內容時,則可用“$變量名稱${變量}累加內容,如:

shell的變量功能 

8、若該變量需要在其他子進程(子進程:在目前這個shell的情況下,去打開另一個新的shell,新的shell就是子進程)執行,則需要以export來使變量變成環境變量:

如:

shell的變量功能 

 

9.通常大寫字符為系統默認變量,自行設置變量可以使用小寫字符。

10.取消變量的方法為使用“unset變量名稱,如:

shell的變量功能 

三、bash中變量的種類

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

變量聲明、賦值:

                export name=VALUE

                declare -x name=VALUE

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

刪除變量:unset name

顯示所有環境變量(環境變量的查詢)

env

printenv

export

declare -x

#env  列出環境下所有環境變量與其內容

#set 可查看所有的變量(含環境變量與自定義變量)

bash內建的環境變量:PATH   SHELL   USER   UID   HOME   PWD ü

SHLVL    LANG     MAIL     HOSTNAME   HISTSIZE    —

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

變量賦值:name=‘value’ v

 可以使用引用value:

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

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

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

 變量引用${name} $name “”

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

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

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

 刪除變量:unset name

3、局部變量:生效范圍為當前shell進程中某代碼片斷(通常指函數)

4、位置變量:$1, $2, …來表示,用于讓腳本在腳本代碼中調用通過命令行傳遞給它的參數。

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

$0: 命令本身

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

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

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

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

set — 清空所有位置變量

5、特殊變量:$?, $0, $*, $@, $#,$$

1$?  變量保存最近的命令退出狀態

2)echo $$:查詢當前進程號

       顯示所有進程  ps -ef | grep bash   tty找到當前的終端 ,查詢當前進程號

       查看進程樹(-p 顯示進程號)pstree -p | grep bash ,查詢當前進程號 

3)echo $PPID:查詢父進程進程號

4)echo $SHLVL:查詢是當前SHELL是幾級SHELL

6、只讀變量:能聲明,但不能修改和刪除

聲明只讀變量:

                           readonly name

                            declare -r name

查看只讀變量:

                             readonly –p

四、變量內容的刪除、替代與替換

1、變量內容的刪除與替換

變量是某個值的名稱,引用變量值就稱為變量替換,$符號是變量替換符號。

變量替換的兩種格式:

     1.   $variable

     2.   ${variable}

例子1.

shell的變量功能 

命令替換是指將命令的標準輸出作為值賦給某個變量。一種是使用反引號,另一種是利用$(),并且$(可以嵌套使用)。

反引號和$()在處理雙斜線\\時是有區別的,反引號將反雙斜線處理為空格,$()將反雙斜線處理為單斜線。

五、退出狀態和退出狀態碼

進程使用退出狀態來報告成功或失敗

? 0 代表成功,1255代表失敗

? $? 變量保存最近的命令退出狀態

v 例如:

ping -c1 -W1 hostdown &> /dev/null

echo $?

bash自定義退出狀態碼:

exit [n]:自定義退出狀態碼

注意:腳本中一旦遇到exit命令,腳本會立即終止;終止退出

狀態取決于exit命令后面的數字

注意:如果未給腳本指定退出狀態碼,整個腳本的退出狀態碼

取決于腳本中執行的最后一條命令的狀態碼。

六、bash中的算術運算:help let

+, -, *, /, %取模(取余), **(乘方)在bc當中乘方是^

實現算術運算:

(1) let var=算術表達式

(2) var=$[算術表達式]

(3) var=$((算術表達式))

(4) var=$(expr arg1 arg2 arg3 …)   乘法時要轉譯* ,即\*

(5) declare –i var = 數值

(6) echo ‘算術表達式’ | bc

乘法符號有些場景中需要轉義,如*

增強型賦值:

                +=,-=, *=, /=, %=

let varOPERvalue

               例如:let count+=3

                       自加3后自賦值

自增,自減:

                 let var+=1

                 let var++

                 let var

                  -=1

                 let var–

 

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

(0)
Light YagamiLight Yagami
上一篇 2017-08-05
下一篇 2017-08-05

相關推薦

  • 關于VIM編輯器

                                                      &nbsp…

    系統運維 2016-08-11
  • Linux簡述與部分基礎命令

    Linux簡述與基礎命令

    Linux干貨 2017-12-04
  • N22第八周作業

    1、請描述網橋、集線器、二層交換機、三層交換機、路由器的功能、使用場景與區別。 網橋: 網橋是早期的二層網絡設備,每個端口分別有一條獨立的交換信道,不是共享一條信道,可隔離沖突域。網橋比集線器(Hub)性能更好,集線器上各端口都是共享同一條信道的,工作于數據鏈路層。后被端口更多的交換機替代。 集線器: 多端口中繼器,工作在物理層,本身不具備識別信號的能力,只…

    Linux干貨 2016-10-17
  • 關于大型網站技術演進的思考(十一)–網站靜態化處理—動靜分離策略(3)

    原文出處: 夏天的森林   前文里我講到了網站靜態化的關鍵點是動靜分離,動靜分離是讓動態網站里的動態網頁根據一定規則把不變的資源和經常變的資源區分開來,動靜資源做好了拆分以后,我們就可以根據靜態資源的特點將其做緩存操作,這就是網站靜態化處理的核心思路。由此可見,網站靜態化處理的核心就是動靜分離和緩存兩大方面,上篇我簡單講述了動靜…

    Linux干貨 2015-03-11
  • 磁盤管理之文件系統

                             文件系統     文件系統是操作系統用于…

    Linux干貨 2016-09-06
  • 每日一練–8.10 腳本

    1、編寫腳本/root/bin/systeminfo.sh,顯示當前主機系統信息,包括主機名,IPv4地址,操作系統版本,內核版本,CPU型號,內存大小,硬盤大小。 2、編寫腳本/root/bin/backup.sh,可實現每日將/etc/目錄備份到/root/etcYYYY-mm-dd中 3、編寫腳本/root/bin/disk.sh,顯示當前硬盤分區中空…

    Linux干貨 2016-08-15
欧美性久久久久