天天看點

Shell變量

環境變量

系統級環境變量:

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[*]})

删除數組指定元素資料:

上一篇: Daily Scrum 11.5
下一篇: Daily Scrum 11.3