環境變量
系統級環境變量:
Shell環境加載全局配置檔案中的變量共享給所有使用者所有shell程式使用,全局共享。
使用者級環境變量:
Shell環境加載個人配置檔案中的變量共享給目前使用者的shell程式使用,登入使用者使用。
檢視系統環境變量:env 檢視所有變量:set
自定義變量
・自定義局部變量:
隻能在這個腳本檔案中使用,等号兩側不能有空格,預設類型都是字元串無法直接進行數值運算,變量的值中間如果有空格,必須雙引号擴起來
指派:
var_name=value
查詢:$var_name ${var_name} (花括号适合拼接字元串)
删除: unset var_name
・自定義常量:
值不可以修改
readonly var_name
・自定義全局變量:
可以在目前shell環境和子shell環境使用(A腳本中執行B腳本,A是父shell環境,B是子shell環境)
export var_name1 var_name2
特殊符号變量
$n:用于接收腳本檔案執行時傳入的參數
$0用于擷取目前腳本檔案名稱
$1-$9代表擷取第一輸入參數到第九個輸入參數
第十個參數以上擷取參數的格式:${數字}
執行腳本檔案傳入參數文法
sh 腳本檔案 輸入參數1 輸入參數2 ...
$#:擷取輸入參數個數
$*,$@:擷取所有輸入參數,用于以後輸出所有參數
不使用雙引号擴起來時,功能一樣
使用雙引号擴起來時
$*:擷取的所有參數拼接為一個字元串,格式為"$1 $2 ... $n"
$@:擷取一組參數清單對象,格式為"$1" "$2" ... "$n"
$?:擷取上一個指令的退出狀态碼或者函數的傳回值
每個shell指令的執行都有一個傳回值,這個值用于說明指令執行是否成功
0代表執行成功 非0代表執行失敗
$$:用于擷取目前shell環境程序的id号
自定義系統環境變量
目前使用者進入shell環境初始化的時候會加載全局配置檔案/etc/profile/裡面的環境變量,供給所有shell程式使用,以後隻要是所有shell程式或指令使用的變量,就可以定義在這個檔案中。
步驟:
1.編輯/etc/profile全局配置檔案
定義變量VAR1= VAR1,并導出為環境變量(G:快速定位到檔案末尾 gg:快速定位到檔案首行)
export VAR1= VAR1
2.重載配置檔案/etc/profile,因為配置檔案修改後要立刻加載裡面的資料就需要重載,
source /etc/profile
3.在shell環境中讀取系統級環境變量
加載流程原理
shell工作環境:
使用者進入linux系統就會初始化shell環境,這個環境會加載全局配置檔案和使用者個人配置檔案中的環境變量,每個腳本檔案都有自己的shell環境
互動式shell:
與使用者進行互動,互動效果就是使用者輸入一個指令,shell環境立刻進行回報響應
非互動式shell:
不需要使用者參與就可以執行多個指令,比如一個腳本檔案含有多個指令,直接執行并給出結果
shell登入環境:需要使用者名密碼登入的shell環境
shell非登入環境:不需要使用者名,密碼進入的shell,或執行腳本檔案
識别shell環境:
$0 bash:非登入環境 -bash:登入環境(不可以在腳本檔案中使用)
shell字元串變量
字元串聲明:
' ':原樣輸出,不能解析變量
" ":可以解析變量 "\"" 可以在雙引号内輸出雙引号
不加引号:可以解析變量,不能加空格
${#字元串變量名}:擷取字元串長度
字元串拼接:
無符号拼接:var3=${var1}${var2} 雙引号拼接:var3="${var1}${var2}"
混合拼接:var3=${var1}"&"${var2} var3=${var1}'&'${var2}
字元串截取:
從左側第0個開始,向右截取2個字元
${var1:0:2}
從右側第5個開始,向右截取2個字元
${var1:0-5:2}
從左邊第一次出現e開始截取右邊所有的字元(不包括e)
${var1#*e}
從左邊最後一次出現e開始截取右邊所有的字元(不包括e)
${var1##*e}
從右邊第一次出現e開始截取左邊所有的字元(不包括e)
${var1%e*}
從右邊最後一次出現e開始截取左邊所有的字元(不包括e)
${var1%%e*}
shell索引數組(隻支援一維數組)
定義:
nums=(29 30 200 66)
nums=(29 30 200 "fdfs")
arr[6]=100
arr2=([0]=1 [3]="afd" [10]=acv)
查詢:
通過下标擷取:${nums[0]}
擷取數組中的所有元素:${arr[@]} ${arr[*]}
擷取數組的長度或個數:${#arr[*]}
擷取數組指定元素的字元長度:${#arr[0]}
拼接:
arr3=(${nums[*]} ${arr2[*]})
删除數組指定元素資料: