shell的變量功能
一、什么是變量
變量是bash環境中非常重要的一個內容,那什么是變量呢?簡單說就是讓一某一個特定字符串來代表另一個比較復雜或者是容易變動的數據。
二、變量的顯示與設置:echo ,unset
1、變量的顯示:echo $變量 echo ${變量}
2.1變量的設置(“設置”或者是“修改”某個變量的內容):用“等號(=)”連接
變量與它的內容。
如:
2.2變量的設置規則
1)變量與變量內容以一個等號“=”連接,如:
“myname=Vbird”
2)等號兩邊不能直接接空格符,錯誤示范如:
““myname= Vbird”或“myname=Vbird Tsai”
3)變量名稱只能是英文字母與數字,但開頭字符不能是數字,錯誤示范如:
“2myname=Vbird”
變量命名規則如下:
a.不能使程序中的保留字:例如if, for
b.只能使用數字、字母及下劃線,且不能以數字開頭
c.見名知義
d.統一命名規則:駝峰命名法
4)變量內容若有空格符可使用雙引號” ” “或者單引號” ‘ “將變量內容結合起來:
a.雙引號內的特殊字符如$等,可以保持原本的特性,如:
b.單引號內的特殊字符則僅為一般字符(純文本),如:
5)可用轉義字符“\”將特殊符號(如$、\、!)變成一般字符。
6、在一串命令中,還需要通過其他的命令提供的信息,可以使用反單引號“`命令`”或者“$(命令)”,如:
7、若該變量為了增加變量內容時,則可用“$變量名稱”或${變量}累加內容,如:
8、若該變量需要在其他子進程(子進程:在目前這個shell的情況下,去打開另一個新的shell,新的shell就是子進程)執行,則需要以export來使變量變成環境變量:
如:
9.通常大寫字符為系統默認變量,自行設置變量可以使用小寫字符。
10.取消變量的方法為使用“unset變量名稱”,如:
三、bash中變量的種類
1、環境變量:生效范圍為當前shell進程及其子進程
變量聲明、賦值:
export name=VALUE
declare -x name=VALUE
變量引用:$name, ${name}
刪除變量:unset name
顯示所有環境變量(環境變量的查詢):
env
printenv
export
declare -x
#env 列出環境下所有環境變量與其內容
#set 可查看所有的變量(含環境變量與自定義變量)
bash內建的環境變量:PATH SHELL USER UID HOME PWD ü
SHLVL LANG MAIL HOSTNAME HISTSIZE —
2、本地變量:生效范圍為當前shell進程;對當前shell之外的其它shell進程, 包括當前shell的子shell進程均無效
變量賦值:name=‘value’ v
可以使用引用value:
(1) 可以是直接字串; name=“root”
(2) 變量引用:name=”$USER”
(3) 命令引用:name=`COMMAND` name=$(COMMAND) v
變量引用:${name} $name “”
:弱引用,其中的變量引用會被替換為變量值 ”
:強引用,其中的變量引用不會被替換為變量值,而保持原字符串 v
顯示已定義的所有變量:set v
刪除變量:unset name
3、局部變量:生效范圍為當前shell進程中某代碼片斷(通常指函數)
4、位置變量:$1, $2, …來表示,用于讓腳本在腳本代碼中調用通過命令行傳遞給它的參數。
$1, $2, …:對應第1、第2等參數,shift [n]換位置
$0: 命令本身
$*: 傳遞給腳本的所有參數,全部參數合為一個字符串
$@: 傳遞給腳本的所有參數,每個參數為獨立字符串
$#: 傳遞給腳本的參數的個數
$@ $* 只在被雙引號包起來的時候才會有差異
set — 清空所有位置變量
5、特殊變量:$?, $0, $*, $@, $#,$$
1)$? 變量保存最近的命令退出狀態
2)echo $$:查詢當前進程號
顯示所有進程 ps -ef | grep bash tty找到當前的終端 ,查詢當前進程號
查看進程樹(-p 顯示進程號)pstree -p | grep bash ,查詢當前進程號
3)echo $PPID:查詢父進程進程號
4)echo $SHLVL:查詢是當前SHELL是幾級SHELL
6、只讀變量:能聲明,但不能修改和刪除
聲明只讀變量:
readonly name
declare -r name
查看只讀變量:
readonly –p
四、變量內容的刪除、替代與替換
1、變量內容的刪除與替換
變量是某個值的名稱,引用變量值就稱為變量替換,$符號是變量替換符號。
變量替換的兩種格式:
1. $variable
2. ${variable}
例子1.
命令替換是指將命令的標準輸出作為值賦給某個變量。一種是使用反引號,另一種是利用$(),并且$(可以嵌套使用)。
反引號和$()在處理雙斜線\\時是有區別的,反引號將反雙斜線處理為空格,$()將反雙斜線處理為單斜線。
五、退出狀態和退出狀態碼
進程使用退出狀態來報告成功或失敗
? 0 代表成功,1-255代表失敗
? $? 變量保存最近的命令退出狀態
v 例如:
ping -c1 -W1 hostdown &> /dev/null
echo $?
bash自定義退出狀態碼:
exit [n]:自定義退出狀態碼
注意:腳本中一旦遇到exit命令,腳本會立即終止;終止退出
狀態取決于exit命令后面的數字
注意:如果未給腳本指定退出狀態碼,整個腳本的退出狀態碼
取決于腳本中執行的最后一條命令的狀態碼。
六、bash中的算術運算:help let
+, -, *, /, %取模(取余), **(乘方)在bc當中乘方是^
實現算術運算:
(1) let var=算術表達式
(2) var=$[算術表達式]
(3) var=$((算術表達式))
(4) var=$(expr arg1 arg2 arg3 …) 乘法時要轉譯* ,即\*
(5) declare –i var = 數值
(6) echo ‘算術表達式’ | bc
乘法符號有些場景中需要轉義,如*
增強型賦值:
+=,-=, *=, /=, %=
let varOPERvalue
例如:let count+=3
自加3后自賦值
自增,自減:
let var+=1
let var++
let var
-=1
let var–
原創文章,作者:Light Yagami,如若轉載,請注明出處:http://www.www58058.com/83904