Linux —— Shell編程之變數賦值和引用
Linux的shell編程是一種非常成熟的程式設計語言,它支援各種類型的變數。有三種主要的變數類型:環境變數、內部變數和使用者變數。 環境變數(environment variable)是系統內容的一部分,不必去定義它們。可以在shell程式中使用它們,某些變數(比如PATH)還能在shell中加以修改。 內部變數(built-in variable)是由系統提供的。與環境變數不同,你不能修改它們。 使用者變數(user variable)是你在編寫shell指令碼時定義的。可以在shell程式內任意使用它們和修改它們。
shell編程和其他程式設計語言的主要不同之處是:在shell編程中,變數是非類型性質的。也就是說,不必指定變數是數字還是字串。 使用者變數
Shell編程中,使用使用者變數無需事先聲明,同時變數名的命名須遵循如下規則:
1). 首個字元必須為字母(a-z,A-Z);
2). 中間不能有空格,可以使用底線(_) ;
3). 不能使用標點符號 ;
4). 不能使用bash裡的關鍵字(可用help命令查看保留關鍵字) 。 變數賦值
變數賦值的格式:
變數名=值
訪問變數值
要取用一個變數的值,只需在變數名前面加一個$ 。
( ATTENTION: Don't keep blank between the variable with the equal operator '=' ) 舉例
#!/bin/bash
# 對變數賦值:
a="hello world" #等號兩邊均不能有空格存在
# 列印變數a的值:
echo -e "A is: $a\n"
備忘:
1). bash中變數賦值,等號兩邊均不能有空格存在;
使用自己喜歡的編輯器,輸入上述內容,並儲存為檔案test_hello.bsh,然後執行 chmod +x test_hello.bsh使其具有執行許可權,最後輸入 ./test_hello或bash test_hello.bsh執行該指令碼。
程式運行結果:
A is: hello world
有時候變數名可能會和其它文字混淆,比如:
num=1
echo "this is the $numst"
上述指令碼並不會輸出"this is the 1st"而是"this is the ";
這是由於shell會去搜尋變數numnd的值,而實際上這個變數並未賦值。
我們可以用花括弧來告訴shell把num變數跟其他部分分開:
num=1
echo "this is the ${num}st"
程式運行結果:
this is the 1st
位置參數
可以編寫一個shell指令碼,當從命令列或者從其他shell指令碼中調用它的時候,這個指令碼接受若干參數。這些選項是通過Linux作為位置參數 (position parameter)提供給shell程式的。位置參數有由系統給出的專用名。存放在變數中的第一個參數名為1(數字1),在程式內可以使用$1來訪問; 存放在變數中的第二個參數名為2,在程式中可以使用$2來訪問,依此類推。在調用shell程式時,可以省略一個或幾個數字大的位置 參數。
例如,如果shell程式mypgm1要求兩個參數(比如名字和姓氏),那麼可以只用一個參數(名字)來調用這個shell程式。但是,你不能只用第二個參數(姓氏)來調用shell程式。 #!/bin/bash #name display program if [ $# -eq 0 ]; then echo "Name not provided." else echo "Your name is $1." fi
在bash中,可以像下面 這樣執行mypgm1:
# . mypgm1
那麼會得到下面的輸出:
Name not provided.
但是,如果像下面這樣執行mypgm1:
# . mypgm1 david 那麼會得到下面的輸出:
Your name is david.
shell程式mypgm1還說明了shell編程的另一個方面,即內部變數。在mypgm1中,變數$#是一個內部變數,它提供傳送給這個shell程式的位置參數的數量。
內部變數
內部變數是Linux所提供的一種特殊類型的變數,這類變數在程式中用來作出判斷。在shell程式內這類變數的值是不能修改的。
部分內部變數總結如下:
表 1.1. 常用內部變數
$0 |
相當於C語言main函數的argv[0] |
$1、$2... |
這些稱為位置參數(Positional Parameter),相當於C語言main函數的argv[1]、argv[2]... |
$# |
相當於C語言main函數的argc - 1,注意這裡的#後面不表示注釋 |
$@ |
表示參數列表"$1" "$2" ...,例如可以用在for迴圈中的in後面。 |
$? |
上一條命令的Exit Status |
$$ |
當前Shell的進程號 |
為了說明這些變數的用法,這裡有一個叫做mypgm2的示範程式: #!/bin/bash #my test program echo "Number of parameter is $#" echo "Program name is $0" echo "Parameters as a single string is $*"
在bash中,如果從命令列上執行mypgm2,如下所示: # . mypgm2 David Victor
那麼會得到下面的結果: Number of parameters is 2 Program name is mypgm2 Parameters as a single string is David Victor 用知識的力量武裝,把生活的絢爛點亮。