天天看點

shell變量

1. 定義變量

1).定義變量時,變量名不加美元符号($),如:

var="hello world"

2).注意,變量名和等号之間不能有空格,這可能和你熟悉的所有程式設計語言都不一樣。同時,變量名的命名須遵循如下規則:

首個字元必須為字母(a-z,A-Z)。

中間不能有空格,可以使用下劃線(_)。

不能使用标點符号。

不能使用bash裡的關鍵字。

var01=100
var02="100"           

注意,這兩個變量存的都是字元串。我們的shell是解釋型語言,不像C,JAVA需要編譯。

2.使用變量

使用一個定義過的變量,隻要在變量名前面加美元符号($)即可,如:

echo $var
echo ${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/bash
var01="20"
echo ${var01}
readonly var01
var01="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           
$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            
變量                                    含義
$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裡面的正好相反。