Shell基本語法之一:什么是變量?
在本書中,我們將shell的基本語法分為5塊:變量、運算符、條件、循環(huán)、函數(shù)(其實任何程序語言都可以說是由這幾塊組成)。
本節(jié)內(nèi)容就分別簡短地介紹下Shell的基本語法,有其他語言經(jīng)驗的讀者們可能會更好理解。
沒有其他語言經(jīng)驗的多寫幾個Shell腳本也就理解了。
1.變量是什么?
顧名思義,變量通常是可變的。在計算機程序語言中,這是第一個需要了解的概念。
簡單來說,在數(shù)學上它是計算公式中的x,在物理上它是一個內(nèi)存空間。
在聲明變量時,相當于在計算機內(nèi)存中,開辟了一個地方,存放了這個變量符號。
它會不斷地被賦值,每被賦值一次,之前的值就會被清空,它的內(nèi)部就保存了現(xiàn)在這個值的數(shù)據(jù)。
2.變量賦值
賦值示例:
- war_name=yaomm ## 賦值yaomm這個數(shù)據(jù)給了war_name這個變量
變量的賦值規(guī)則:
- 變量名和等號之間不能有空格,例如“war_name = yao”。
- 命名只能使用英文字母、數(shù)字和下劃線,首字符不能以數(shù)字開頭,例如“3war”。
- 變量名中間不能有空格,可以使用下劃線“_”,例如“war name”。
- 變量名不能使用標點符號,如點“.”,例如“.=yaomm”。
- 不能使用bash里的關鍵字(可用help命令查看保留關鍵字),例如“bash=233”。
3.變量使用示例
- [root@linuxido ~]# var_name=yaomm ## 變量賦值,賦值var_name變量為yaomm
- [root@linuxido ~]# echo ${var_name} ## 使用echo打印變量,變量以【${}】方式引用
- yaomm
- [root@linuxido ~]# echo $var_name ## 也可以使用【$ + 變量名】輸出變量值
- yaomm
- [root@linuxido ~]# echo "var_name is $var_name" ## ==> 變量可以在雙引號中被引用
- var_name is yaomm
${var_name}與$var_name的區(qū)別是:被花括號包圍的變量不會產(chǎn)生歧義。
例如有一個變量名為var_nameexe的值是23,此時echo $var_nameexe 應打印什么值?
4.變量傳參
什么是變量傳參?
即在編寫腳本時預留一個變量,然后由外部傳遞進來一個具體的值給這個變量。
示例如下:
- [root@linuxido shell]# cat 001.sh ## 查看使用【vi 001.sh】編輯的第一個腳本
- #!/bin/bash
- # author:姚毛毛的博客
- echo "Shell 傳遞參數(shù)實例!"
- echo '第一個參數(shù)${1}:' ${1}
- echo '第二個參數(shù)$2:' $2
- echo '參數(shù)個數(shù)$#:' $#
- echo '所有參數(shù)作為一個字符串顯示$*:' $*
- echo '所有參數(shù)合為數(shù)組$@:' $@
- echo '當前腳本進程號PID:' $$
- [root@linuxido shell]# sh 001.sh yaomm 666 ## 執(zhí)行001.sh,參數(shù)有2個:yaomm、666
- Shell 傳遞參數(shù)實例!
- 第一個參數(shù)$1:yaomm
- 第二個參數(shù)$2:666
- 參數(shù)個數(shù)$#:2
- 所有參數(shù)作為一個字符串顯示$*:yaomm 666
- 所有參數(shù)合為數(shù)組$@:yaomm 666
- 當前腳本進程號PID:65134
參數(shù)傳遞規(guī)則:
- $0:腳本自身文件名。
- $#:傳遞到腳本的參數(shù)個數(shù)。
- $n:傳遞到腳本的第一個參數(shù),n為傳遞參數(shù)的順序。
- $*:所有參數(shù)合成一個字符串。
- $@:所有參數(shù),一個數(shù)組。
- $$:當前腳本運行的進程號PID。
- $?:上一個腳本、函數(shù)返回結(jié)果。
要執(zhí)行的腳本為全路徑時,使用$0會獲取到腳本路徑,如果只想取腳本路徑或者腳本名稱,可以使用【dirname】、【basename】這兩個命令,如下所示:
- [root@linuxido /shell]# dirname /shell/001.sh ## 獲取路徑
- /shell
- [root@linuxido /shell]# basename /shell/001.sh ## 獲取腳本名稱
- 001.sh
5.數(shù)組
在Shell中除了普通變量外,還有個數(shù)組變量(只支持一維數(shù)組)。
與其他語言類似,數(shù)組下標從0開始。
不同的是,數(shù)組內(nèi)容要用括號來表示,數(shù)組元素之間使用空格分割。
示例如下:
- [root@linuxido shell]# war_array=(y ao "mm" 1987) ## 設置數(shù)組元素內(nèi)容
- [root@linuxido shell]# echo ${war_array[*]} ## 打印所有數(shù)組元素
- y ao mm 1987
- [root@linuxido shell]# echo ${war_array[2]} ## 打印第三個數(shù)組元素
- mm
- [root@linuxido shell]# echo ${#war_array[@]} ## 數(shù)組元素個數(shù)
- 4
- [root@linuxido shell]# echo ${#war_array[*]} ## 數(shù)組元素個數(shù)
- 4
或者使用下標定義數(shù)組:
- war_array[0]=y
- war_array[1]=ao
- war_array[2]=’mm’
- war_array[3]=2021