1、 SHELL 變數及運用
(1)shell變數
變數是shell傳遞資料的一種方法。變數是用來代表每個值的符號名,透過變數,可以在記憶體中儲存資料,也可以在指令碼執行中進行修改和訪問儲存的資料。
(2)變數設定規則
A、變數名稱通常是大寫字母,它可以由數字、字母(大小寫)和下劃線_組成。變數名區分大小寫;變數名稱不能以數字開頭;
B、等號 = 用於為變數分配值,在使用過程中等號兩邊不能有空格;
C、變數儲存的資料型別是整數值和字串值;
D、在對變數賦於字串值時,建議大家用引號將其括起來。因為如果字串中存在空格隔符號。需要使用單引號或雙引號;
E、要對變數進行呼叫,可以在變數名稱前加美元符號$;
F、如果需要增加變數的值,那麼可以進行變數值的疊加。不過變數需要用雙引號包含“$變數名”或用${變數名}包含;
(3)變數分類
按照變數的作用可以分成4類:
A、使用者自定義變數;
B、環境變數:這種變數中主要儲存的是和系統操作環境相關的資料;
C、位置引數變數:這種變數主要是用來向指令碼當中傳遞引數或資料的,變數名不能自定義,變數作用是固定的;
E、預定義變數:是 Bash 中已經定義好的變數,變數名不能自定義,變數作用也是固定的。
按照變數作用範圍分為2類:
A、區域性變數是 shell 程式內部定義的,其使用範圍僅限於定義它的程式,對其它程式不可見。包括:使用者自定義變數、位置變數和預定義變數。
B、全域性變數是環境變數,其值不隨 shell 指令碼的執行結束而消失。
(4)使用者自定義變數
變數名命名規則:由字母或下劃線打頭,不允許數字開頭,後面由字母、數字或下劃線組成,並且大小寫字母意義不同。在使用變數時,在變數名前加$。
Eg1:給變數test賦值
Eg2:變數值疊加,使用${}
$name 是${name}的簡化版本,但是在某些情況下,還必須使用花括號引起的方式來消除歧義並避免意外的結果。
(5)命令替換
Date命令:
date 命令是顯示或設定系統時間與日期。
-s<字串>:根據字串來設定日期與時間。字串前後必須加上雙引號;
<+時間日期格式>:指定顯示時,使用特定的日期時間格式 。
例項:
A、 顯示當前時間年、月、日
B、 顯示當前時間年、月
#顯示日期及時間
#顯示日期及時間,使用/分割
#顯示日期及時間,使用-進行分割(備份一般使用該方式)
Date命令加減操作:
#顯示當前時間(年、月、日)
#顯示明天的日期
#顯示昨天的日期
#顯示上一月的日期
#顯示下一月的日期
#顯示前一年的日期
#顯示下一年的日期
設定時間:
#設定成20201020,這樣會把具體時間設定成空 00:00:00
#設定具體時間,不會對日期做更改
#設定全部時間
A、命令中呼叫date命令
(6)命令的巢狀使用,使用$( $( ))
(7)shell 中單引號和雙引號區別
‘’ 在單引號中所有的字元包括特殊字元($,'',`和\)都將解釋成字元本身而成為普通字元。
“” 在雙引號中,除了$, '', `和\以外所有的字元都解釋成字元本身,擁有“呼叫變數的值”、“引用命令”和“轉義符”的特殊含義。
注:\轉義符,跟在\之後的特殊符號將失去特殊含義,變為普通字元。如\$將輸出“$”符號,而不當做是變數引用。
Eg:\轉義符作用
A、雙引號與單引號區別
注:單引號之間的內容原封不動賦值給變數,雙引號之間的內容如有特殊符號會保留它的特殊含義。
刪除變數:
(8)環境變數
在 bash shell 中,變數分為兩類:全域性變數和區域性變數
全域性變數:對於shell會話和所有的子shell都是可見的
區域性變數:它只在自己的程式當中使用
A、區域性變數
#執行1.sh 時,會使用另一個bash去執行,就訪問不到$test的值
B、env 命令檢視所全域性變數
C、使用 export 把這個區域性變數輸出為全域性變數
D、讓變數永久生效,可以把定義好的變數寫入配置檔案
當登入系統或新開啟一個 ssh 連線啟動 bash 程式時,一定會載入這 4 個配置檔案:
#系統全域性環境和登入系統的一些配置
#shell 全域性自義配置檔案,用於自定義 shell
#用於單獨自定義某個使用者的 bash
#使用者單獨自定義某個使用者的系統環境
(9)shell位置變數
Shell解釋執行使用者的命令時,將命令列的第一個字元作為命令名,而其它字元作為引數。
$0 獲取當前執行shell指令碼的檔案檔名,包括指令碼路徑,命令本身
$n 獲取當前指令碼的第n個引數 n=1,2.....n 當 n 大於 9 時 用${10}表示
Eg:
(10)特殊變數
有些變數是一開始執行 Script 指令碼時就會設定,且不能被修改,但我們不叫它只讀的系統變數,而叫它特殊變數。這些變數當一執行程式時就有了,以下是一些特殊變數:
Eg: