1. 定義變量
1).定義變量時,變量名不加美元符號($),如: var="hello world"2).注意,變量名和等號之間不能有空格,這可能和你熟悉的所有編程語言都不一樣。同時,變量名的命名須遵循如下規則: 首個字符必須為字母(a-z,A-Z)。 中間不能有空格,可以使用下劃線(_)。 不能使用標點符號。 不能使用bash里的關鍵字。 var01=100var02="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, $#, $*, $@, $?, $$和命令行參數
在此先聲明:這里的$0,$1-$9就別跟awk里面的弄混淆了;它們的意義是完全不同的哦。
變量 含義$0 當前腳本的文件名$n 傳遞給腳本或函數的參數。n 是一個數字,表示第幾個參數。例如,第一個參數是$1,第二個參數是$2。$# 傳遞給腳本或函數的參數個數。$* 傳遞給腳本或函數的所有參數。$@ 傳遞給腳本或函數的所有參數。被雙引號(" ")包含時,與 $* 稍有不同。$? 上個命令的退出狀態,或函數的返回值。$$ 當前Shell進程ID。對于 Shell 腳本,就是這些腳本所在的進程ID?!咀⒁狻繉?n;若n大于9;則需要加衣服{}。不然會凍僵了,就沒人會認識了。例如${10}。這我就認識原來是老十。反之;你是老1+0,還是老十。這個我就要好好想想了。
對于$?:可以獲取上一個命令的退出狀態。所謂退出狀態,就是上一個命令執行后的返回結果。記住是上一個命令執行結果或者條件判斷結果。意思是說你的條件判斷有一堆命令;也只取最后一個;例如ll;cd md。是取cd md的返回結果。退出狀態是一個數字,一般情況下,大部分命令執行成功會返回 0,失敗返回 1意思是boolean說 0是成功的狀態;非0是失敗的狀態。這跟awk里面的正好相反。
新聞熱點
疑難解答