Shell脚本编程----变量的使用
接觸Linux Shell腳本編程很久了,但是發(fā)現(xiàn)每次學(xué)完之后就會(huì)忘記,這似乎又印證了那句"好記性不如爛筆頭"的言語,事實(shí)確實(shí)如此,堅(jiān)持寫博客,定期回顧,你會(huì)感覺很充實(shí)。
這是本系列教程的第一篇----變量的使用,該系列文章不是我的原創(chuàng)制作,但它們是我從英文翻譯而來,行文中很夾雜著一些自己的理解和實(shí)踐。我喜歡看英文文檔,不過有時(shí)候看著看著就想睡覺,本系列教程不會(huì)回答諸如Shell是什么?有什么作用的問題,我們會(huì)直接敲代碼,直接了當(dāng)~~接下來讓我們一起一步一步學(xué)習(xí)Shell編程吧!
在本章中,我們將學(xué)習(xí)如何在Unix中使用Shell變量。變量是我們?yōu)槠浞峙渲档淖址7峙涞闹悼梢允菙?shù)字,文本,文件名,設(shè)備或任何其他類型的數(shù)據(jù)。一個(gè)變量只不過是指向?qū)嶋H數(shù)據(jù)的指針,或者說是一個(gè)容器,你可以在Shell中創(chuàng)建、分配和刪除變量。
原文網(wǎng)址:https://www.tutorialspoint.com/unix/unix-special-variables.htm
一、變量名
一個(gè)Sheel變量名只能由英文字母(A-Z/a-z)、數(shù)字(0-9)或下劃線_組成,并且不能由數(shù)字打頭,這和Java中變量的命名其實(shí)是一樣的~
按照慣例,Shell變量一般都是大寫字母,當(dāng)然,這并不是必須的。
舉個(gè)例子,下面的變量名是合法的:
_ALI TOKEN_A VAR_1 VAR_2 復(fù)制代碼下面的變量是非法的:
2_VAR # 以數(shù)字打頭 -VARIABLE # -是非法字符 VAR1-VAR2 VAR_A! # !是特殊字符 復(fù)制代碼你之所以不能使用像!、*、?、-這些字符進(jìn)行命名,因?yàn)檫@些變量在Shell中有特殊含義。
變量定義
Shell中采用下面的形式定義變量:
variable_name=variable_value 復(fù)制代碼左邊是變量的名字,右邊是變量值。舉個(gè)例子:
NAME="Zara Ali" 復(fù)制代碼上面定義了一個(gè)Name變量,它的值為Zara Ali,對(duì)于這種類型的變量,Shell中稱為標(biāo)量變量,一個(gè)標(biāo)量變量在某一時(shí)刻只能有一個(gè)值與之對(duì)應(yīng)。
Shell使您能夠在變量中存儲(chǔ)任何想要的值。舉個(gè)例子:
VAR1="Zara Ali" VAR2=100 復(fù)制代碼二、使用變量
如果你想訪問變量的值,在Shell中你需要使用$前綴,舉個(gè)例子,下面的腳本將會(huì)訪問之前定義的Name變量并將它打印出來。
NAME="Zara Ali" echo $NAME 復(fù)制代碼上面的腳本將打印出Zara Ali.
筆者在自己的阿里云測(cè)試如下:
三、只讀變量
Shell允許你使用read-only命令將變量聲明為只讀方式,一旦將變量聲明為只讀模式,變量的值不能被改變。
舉個(gè)栗子,下面的腳本片段將拋出一個(gè)異常信息,因?yàn)槲覀冊(cè)噲D改變一個(gè)只讀變量的值:
NAME="Zara Ali" readonly NAME NAME="Qadiri" 復(fù)制代碼執(zhí)行結(jié)果如下:
./FirstShell.sh: line 3: NAME: readonly variable
筆者親測(cè)如下圖:
四、取消變量賦值
取消變量賦值或刪除變量會(huì)指示shell從它跟蹤的變量列表中刪除變量。一旦你取消了某個(gè)變量的賦值,你就不能訪問到該變量的值了。
unset命令用于取消某個(gè)變量的賦值,其語法格式如下:
unset variable_name
舉個(gè)例子:
NAME="Zara Ali" unset NAME echo $NAME 復(fù)制代碼上面的腳本不會(huì)打印出任何東西,因?yàn)槟悴荒茌敵鍪褂胾nset命令修飾的變量,此時(shí)變量已經(jīng)沒有值了。你可能會(huì)問,那么被unset修飾過的變量還可以再次被賦值嗎?答案是肯定的。筆者將腳本修改如下:
NAME="Zara Ali" unset NAME NAME="S" echo $NAME 復(fù)制代碼上面的腳本將會(huì)輸出S
五、變量類型
Shell中主要存在三種變量類型,分別是:
-
1、局部變量
局部變量就是只存在與某個(gè)shell實(shí)例的變量,它不適用于由shell啟動(dòng)的程序。 它們?cè)诿钐崾痉幵O(shè)置。
-
2、環(huán)境變量
環(huán)境變量可用于shell的任何子進(jìn)程。 某些程序需要環(huán)境變量才能正常工作。 通常,shell腳本只定義它運(yùn)行的程序所需的那些環(huán)境變量。
-
3、Shell變量
一個(gè)shell變量是一個(gè)特殊的變量,它由shell設(shè)置并且為了正常工作而被shell需要。 其中一些變量是環(huán)境變量,而另一些則是局部變量。
六、特殊變量
在此節(jié)中我們將討論Unix中的特殊變量。舉個(gè)例子,$表示當(dāng)前Shell所處的進(jìn)程號(hào)PID:
echo $$
上面將輸出你當(dāng)前的PID,如:
下面表格列出了你能在Shell腳本中使用的特殊變量:
| 1 | $0 當(dāng)前腳本的文件名稱 |
| 2 | $n 這些變量對(duì)應(yīng)于腳本被調(diào)用的參數(shù),如$1表示調(diào)用該腳本時(shí)傳入?yún)?shù)中的第一個(gè)參數(shù),$2表示第二個(gè),以此類推 |
| 3 | $# 調(diào)用當(dāng)前腳本傳入的參數(shù)個(gè)數(shù) |
| 4 | $* 傳遞給腳本或函數(shù)的所有參數(shù) |
| 5 | $@ 傳遞給腳本或函數(shù)的所有參數(shù) |
| 6 | $? 上個(gè)命令的退出狀態(tài),或函數(shù)的返回值 |
| 7 | $$ 當(dāng)前Shell進(jìn)程ID。對(duì)于 Shell 腳本,就是這些腳本所在的進(jìn)程ID。 |
| 8 | $! 最后一個(gè)后臺(tái)命令的進(jìn)程號(hào)PID |
七、命令行參數(shù)
命令行參數(shù)$1,$2,$3,...,$9是位置參數(shù),$0指向?qū)嶋H的命令,程序,shell腳本或函數(shù),$1,$2,$3,...,$9作為參數(shù)命令。下面的栗子展示了各種特殊變量的使用:
echo "File Name: $0" echo "First Parameter : $1" echo "Second Parameter : $2" echo "Quoted Values: $@" echo "Quoted Values: $*" echo "Total Number of Parameters : $#" 復(fù)制代碼采用下面的方式運(yùn)行,結(jié)果如下:
$./FirstShell.sh Zara Ali File Name : ./FirstShell.sh First Parameter : Zara Second Parameter : Ali Quoted Values: Zara Ali Quoted Values: Zara Ali Total Number of Parameters : 2 復(fù)制代碼八、$*和$@的區(qū)別
$* 和 $@ 都表示傳遞給函數(shù)或腳本的所有參數(shù),不被雙引號(hào)("")包含時(shí),都以$1 $2 … $n的形式輸出所有參數(shù)。
但是當(dāng)它們被雙引號(hào)("")包含時(shí),$* 會(huì)將所有的參數(shù)作為一個(gè)整體,以$1 $2 … $n的形式輸出所有參數(shù);$@ 會(huì)將各個(gè)參數(shù)分開,以$1 $2 … $n 的形式輸出所有參數(shù)
for TOKEN in "$*" doecho $TOKEN donefor token in "$@" doecho $token done 復(fù)制代碼上面腳本中*被雙引號(hào)包括,當(dāng)采用下面方式調(diào)用時(shí),兩者輸出的結(jié)果是不一樣的,如下:
九、退出狀態(tài)
$!表示上一條命令或者函數(shù)的執(zhí)行狀態(tài),如果返回0,則表示執(zhí)行成功,1表示失敗
總結(jié)
以上是生活随笔為你收集整理的Shell脚本编程----变量的使用的全部?jī)?nèi)容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: 群里别人问的杂七杂八的问题
- 下一篇: 总结:Oracle快速入门