shell基礎篇(二)-shell變數

來源:互聯網
上載者:User

標籤:style   blog   color   os   使用   java   ar   檔案   div   

1. 定義變數

1).定義變數時,變數名不加貨幣符號($),如:
var="hello world"
2).注意,變數名和等號之間不能有空格,這可能和你熟悉的所有程式設計語言都不一樣。同時,變數名的命名須遵循如下規則:
首個字元必須為字母(a-z,A-Z)。
中間不能有空格,可以使用底線(_)。
不能使用標點符號。
不能使用bash裡的關鍵字。
var01=100
var02="100"
注意,這兩個變數存的都是字串。我們的shell是解釋型語言,不像C,JAVA需要編譯。

 

2.使用變數

使用一個定義過的變數,只要在變數名前面加貨幣符號($)即可,如:

echo $varecho ${var}   ##推薦這種。

變數名外面的花括弧是可選的,加不加都行,加花括弧是為了協助解譯器識別變數的邊界,比如下面這種情況:

filename="lottu"echo "this is ${filename}01"如果不給filename變數加花括弧,寫成echo "this is $filename01",

解譯器就會把filename01當成一個變數(其值為空白),這個filename01我們可沒定義。
代碼執行結果就不是我們期望的樣子了

 

3.重新定義變數

 

已定義的變數,可以被重新定義,如:

abc="lottu"echo ${abc}abc="hello world"echo ${abc}

 4. 唯讀變數

使用 readonly 命令可以將變數定義為唯讀變數,唯讀變數的值不能被改變。即其他語言的常量。如lottu03.sh

#!/bin/bashvar01="20"echo ${var01}readonly var01var01="10"

 運行結果如下:

$ ./lottu03.sh 20./lottu03.sh: line 5: var01: readonly variable

5. 刪除變數

使用 unset 命令可以刪除變數。文法:
unset varname
變數被刪除後不能再次使用;unset 命令不能刪除唯讀變數。

6. 顯示所有變數

看看這個使用者下有哪些變數包括環境變數,本地變數:set  ##我們之前定義的var,abc就是在這裡面。
只顯示環境變數: env
本地變數轉換為環境變數;使用命令export
刪除環境變數;跟本地變數沒區別;使用命令unset.

7.變數的間接引用

variable:+word   :如果變數 variable 被定義,那麼返回 word,但不改變 variable 的值。
variable:=value   :對未賦值的variable,將value值賦給它
variable:-value    :對未賦值的variable,將value值賦給它,但不改變 variable 的值。

:=和:-是兩種常用的符號,看下面的例子

例1:先將colour賦值為black,然後輸出${colour:=blue}和${colour:-blue},兩者輸出結果相同,都為black,這是因為colour變數已經賦過值“:=”和”:-”都不重設其值。注意,使用以上兩種符號時,都需要用花括弧將賦值式子括起來,否則Shell將colour:=blue整個字串當做變數名進行處理。

$colour=black$echo "The background is ${colour:=blue}" The background is black$echo "The background is ${colour:-blue}" The background is black

 例2:清除colour變數值,再分別輸出${colour:=blue}、$colour和${colour:-blue}、$colour的值,結果顯示:${colour:=blue}和${colour:-blue}值都為blue,因為colour未賦值兩個符號都將blue賦給colour。但是,調用${colour:-blue}後,colour仍然為空白,即”:-”符號未將blue真正儲存到colour中,而“:=”符號將blue真正儲存起來。

$unset colour$echo "The background is ${colour:-blue}" The background is blue$echo $colour $echo "The background is ${colour:=blue}" The background is blue$echo $colour                           #注意這步跟上面的比較 blue  

 

8.特殊變數:Shell $0, $#, $*, [email protected], $?, $$和命令列參數

在此先聲明:這裡的$0,$1-$9就別跟awk裡面的弄混淆了;它們的意義是完全不同的哦。

變數                                    含義
$0                                      當前指令碼的檔案名稱
$n                                      傳遞給指令碼或函數的參數。n 是一個數字,表示第幾個參數。例如,第一個參數是$1,第二個參數是$2。
$#                                      傳遞給指令碼或函數的參數個數。
$*                                      傳遞給指令碼或函數的所有參數。
[email protected]                                     傳遞給指令碼或函數的所有參數。被雙引號(" ")包含時,與 $* 稍有不同。
$?                                      上個命令的退出狀態,或函數的傳回值。
$$                                      當前Shell進程ID。對於 Shell 指令碼,就是這些指令碼所在的進程ID。
【注意】對$n;若n大於9;則需要加衣服{}。不然會凍僵了,就沒人會認識了。例如${10}。這我就認識原來是老十。反之;你是老1+0,還是老十。這個我就要好好想想了。

對於$?:可以擷取上一個命令的退出狀態。所謂退出狀態,就是上一個命令執行後的返回結果。記住是上一個命令執行結果或者條件判斷結果。意思是說你的條件判斷有一堆命令;也只取最後一個;例如ll;cd md。是取cd md的返回結果。
退出狀態是一個數字,一般情況下,大部分命令執行成功會返回 0,失敗返回 1
意思是boolean說 0是成功的狀態;非0是失敗的狀態。這跟awk裡面的正好相反。

 

 

shell基礎篇(二)-shell變數

相關文章

聯繫我們

該頁面正文內容均來源於網絡整理,並不代表阿里雲官方的觀點,該頁面所提到的產品和服務也與阿里云無關,如果該頁面內容對您造成了困擾,歡迎寫郵件給我們,收到郵件我們將在5個工作日內處理。

如果您發現本社區中有涉嫌抄襲的內容,歡迎發送郵件至: info-contact@alibabacloud.com 進行舉報並提供相關證據,工作人員會在 5 個工作天內聯絡您,一經查實,本站將立刻刪除涉嫌侵權內容。

A Free Trial That Lets You Build Big!

Start building with 50+ products and up to 12 months usage for Elastic Compute Service

  • Sales Support

    1 on 1 presale consultation

  • After-Sales Support

    24/7 Technical Support 6 Free Tickets per Quarter Faster Response

  • Alibaba Cloud offers highly flexible support services tailored to meet your exact needs.