變量:命名的內存空間
1.作用:①數據存儲格式
②參與的運算
③表示的數據范圍
類型:字符
數值:整型、浮點型
變量命名法則:
①不能使程序中的保留字:例如if, for
②只能使用數字、字母及下劃線,且不能以數字開頭
③見名知義
2.bash 中變量的種類
根據變量的生效范圍等標準:
(1)本地變量:生效范圍為當前shell 進程;對當前shell 之外的其它shell 進程,包括當前shell 的子shell 進程均無效
(2)環境變量:生效范圍為當前shell 進程及其子進程局部變量,父進程無效
(3)位置變量:在腳本代碼中調用通過命令行傳遞給腳本的參數
$1, $2, … :對應第1 、第2 等參數,shift [n] 換位置
$0: 命令本身
$*: 傳遞給腳本的所有參數,
$@: 傳遞給腳本的所有參數,
$#: 傳遞給腳本的參數的個數
set — 清空所有位置變量
shift # 刪除前#個參數,其他參數往前移#位
$@ $* 只在被雙引號包起來的時候才會有差異
$*: 全部參數合為一個字符串
$@: 每個參數為獨立字符串
(4)特殊變量:$?, $$
①$? 變量保存最近的命令退出狀態
②echo $$:查詢當前進程號
顯示所有進程 ps -ef | grep bash tty找到當前的終端 ,查詢當前進程號
查看進程樹(-p 顯示進程號)pstree -p | grep bash ,查詢當前進程號
③echo $PPID:查詢父進程進程號
④echo $SHLVL:查詢是當前SHELL是幾級SHELL
3.變量的賦值,查詢,執行,引用,刪除
(1)變量賦值(本地變量和環境變量的區別)
本地變量:name=‘value’
環境變量:export varname=value
declare -x varname=value
(2)變量查詢(本地變量和環境變量的區別)
本地變量:set (即查本地,也查環境)
環境變量:env printenv(搜索的結果一樣)
export declare -x(搜索的結果一樣)
(3)變量執行
若當前SHELL和子SHELL有相同的變量時:
./執行腳本時,在子SHELL下讀取變量xiaoming,回到當前SHELL,當前的變量xiaoming不受影響
source 和 . 執行腳本時,直接在當前SHELL下,讀取子SHELL下的變量xiaoming,當前SHELL的變量xiaoming被覆蓋(危險)
(4)變量引用
轉譯:\ 完全轉譯 ‘ ‘ 完全轉譯
“”部分轉譯 \ ` ! $ 這4個不轉譯
$varname 普通引用(里邊沒特殊字符)
‘$varname’ 或 在 $varname用\ 完全轉譯特殊字符
“$varname” 部分轉譯
“$varname” 和 ${varname} 都能表示界限
特殊:當變量值當中包含換行符,如果希望引用出的值同樣包含換行符,只能使用“$varname”
varname=$(COMMAND) 或 varname=`COMMAND` 調用命令結果
varname=”$var” 將變量賦予其他變量
練習:編寫腳本/root/bin/systeminfo.sh, 顯示當前主機系統信息,包括主機名,IPv4 地址,操作系統版本,內核版本,CPU 型號,內存大小,硬盤大小。
注意:賦值變量one,two…時是賦值命令的結果,所以需要用` ` 或 $( )。
echo時,引用one,two…等變量時,加” ” 引用變量
(5)刪除變量
unset name
4.只讀變量: 只能聲明, 但不能修改和刪除
聲明只讀變量:readonly name
declare -r name
查看只讀變量:readonly –p
5.退出狀態
(1)進程使用退出狀態來報告成功或失敗
? $? 變量保存最近的命令退出狀態
? 0 代表成功,1 -255 代表失敗
(2)退出狀態碼
bash 自定義退出狀態碼
exit [n] :自定義退出狀態碼 多用于 if 語句
注意:腳本中一旦遇到exit 命令,腳本會立即終止;終止退出狀態取決于exit 命令后面的數字
注意:如果未給腳本指定退出狀態碼,整個腳本的退出狀態碼取決于腳本中執行的最后一條命令的狀態碼
6.變量的算術運算
①bash中的算術運算: let
+, -, *, /, %取模(取余), **(乘方)在bc當中乘方是^
實現算術運算:
① let var=算術表達式
② var=$[算術表達式] echo $[ ]
③ var=$((算術表達式))
④ var=$(expr arg1 arg2 arg3 …) 乘法時要轉譯* ,即\*
⑤ declare –i var = 數值
⑥ echo ‘算術表達式’ | bc 在bc當中乘方是^
②增強型賦值:
let var+=# 自加#后賦值 let var++ 自增1
let var-=# 自加#后賦值 let var– 自減1
原創文章,作者:along,如若轉載,請注明出處:http://www.www58058.com/83720