shell的變數學習
1、變數定義
定義變數如:
1 your_name="jack"
注意,變數名和等號之間不能有空格。同時,變數名的命名須遵循如下規則:
命名只能使用英文字母,數字和下劃線,首個字元不能以數字開頭。
2、變數運用
使用一個定義過的變數,只要在變數名前面加美元符號即可。如:
1 your_name="jack"
2 echo $your_name
3 也可以echo ${your_name}
3、只讀變數
使用 readonly 命令可以將變數定義為只讀變數,只讀變數的值不能被改變。
語法:readonlyvariable_name
4、刪除變數
使用 unset 命令可以刪除變數。
語法:unset variable_name
5、變數型別
字串是shell程式設計中最常用最有用的資料型別:數字,字串,陣列。字串可以用單引號,也可以用雙引號。
1.字串:
(1)單引號字串的限制:
單引號裡的任何字元都會原樣輸出,單引號字串中的變數是無效的;
單引號字串中不能出現單獨一個的單引號(對單引號使用轉義符後也不行),但可成對出現,作為字串拼接使用。
(2)雙引號的優點:
雙引號裡可以有變數
雙引號裡可以出現轉義字元
(3)獲取字串的長度:
1 echo ${#your_name}
(4)訪問字串裡的字元:
1 echo ${your_name:1:2}
(5)查詢字串裡的字元:
1 ·expr index ${your_name} a·
(6)expr命令詳解:
1 NAME 2 expr - evaluate expressions 3 4 SYNOPSIS 5 expr EXPRESSION 6 expr OPTION 7 8 DESCRIPTION 9 --help display this help and exit 10 11 --version 12 output version information and exitView Code13 14 Print the value of EXPRESSION to standard output. A blank line below 15 separates increasing precedence groups. EXPRESSION may be: 16 17 ARG1 | ARG2 18 ARG1 if it is neither null nor 0, otherwise ARG2 19 20 ARG1 & ARG2 21 ARG1 if neither argument is null or 0, otherwise 0 22 23 ARG1 < ARG2 24 ARG1 is less than ARG2 25 26 ARG1 <= ARG2 27 ARG1 is less than or equal to ARG2 28 29 ARG1 = ARG2 30 ARG1 is equal to ARG2 31 32 ARG1 != ARG2 33 ARG1 is unequal to ARG2 34 35 ARG1 >= ARG2 36 ARG1 is greater than or equal to ARG2 37 38 ARG1 > ARG2 39 ARG1 is greater than ARG2 40 41 ARG1 + ARG2 42 arithmetic sum of ARG1 and ARG2 43 44 ARG1 - ARG2 45 arithmetic difference of ARG1 and ARG2 46 47 ARG1 * ARG2 48 arithmetic product of ARG1 and ARG2 49 50 ARG1 / ARG2 51 arithmetic quotient of ARG1 divided by ARG2 52 53 ARG1 % ARG2 54 arithmetic remainder of ARG1 divided by ARG2 55 56 STRING : REGEXP 57 anchored pattern match of REGEXP in STRING 58 59 match STRING REGEXP 60 same as STRING : REGEXP 61 62 substr STRING POS LENGTH 63 substring of STRING, POS counted from 1 64 65 index STRING CHARS 66 index in STRING where any CHARS is found, or 0 67 68 length STRING 69 length of STRING
2.陣列:
bash支援一維陣列(不支援多維陣列),並且沒有限定陣列的大小。
類似於 C 語言,陣列元素的下標由 0 開始編號。獲取陣列中的元素要利用下標,下標可以是整數或算術表示式,其值應大於或等於 0。
(1)定義陣列:
在 Shell 中,用括號來表示陣列,陣列元素用"空格"符號分割開。定義陣列的一般形式為:
陣列名=(值1 值2 ... 值n)
(2)讀取陣列:
讀取陣列元素值的一般格式是:${陣列名[下標]}
(3)獲取陣列的長度:
獲取陣列長度的方法與獲取字串長度的方法相同,例如:
1 # 取得陣列元素的個數 2 length=${#array_name[@]} 3 # 或者 4 length=${#array_name[*]} 5 # 取得陣列單個元素的長度 6 lengthn=${#array_name[n]}
6、變數作用範圍
(1)使用者自定義變數
在 shell 中執行程式時,shell 會提供一組環境變數。export 可新增,修改或刪除環境變數,供後續執行的程式使用。export 的效力僅限於該次登陸操作。
格式:
export 變數名=變數值 [...變數名n=變數值n]
(2)環境變數
環境變數配置檔案:
全域性配置檔案:/etc/profile
使用者配置檔案:~/.bash_profile
(3)檢視環境變數
set命令可以檢視所有的shell變數,其中包括環境變數
1 #常見的環境變數 2 $USER 檢視賬戶資訊 3 $logname 登入相關資訊 4 $UID 5 $Shell 6 $HOME 家目錄 7 $pwd 8 $PATH 使用者所輸入的命令是在哪些目錄中查詢 9 $PS1 10 $PS2 11 $RANDOM 隨機數
(4)位置變數
1 表示為:$n (n為1~9之間的數字) 2 #./test.sh one two three four five six 3 $0 表示檔名本身 4 one就是:$1 5 two就是:$2
(5)預定義變數
1 $# :命令列中位置引數的個數 2 $* :所有位置引數的內容 3 $? :上一條命令執行後返回的狀態,當返回狀態值為0時表示執行正常,非0表示執行異常或出錯 4 $$ :當前所在程序的程序號 5 $! :後臺執行的最後一個程序號 6 $0 :當前執行的程序/程式名