標籤:shell-變數
是一種弱類型的變數,聲明時不需要指定其變數類型,也不需要遵循“先聲明後使用”,任何時候只要想用就可以用。 局部變數 在某個shell中生效的變數,在其他shell中無效。可以使用local內建命令來“顯示”的聲明局部變數 環境變數 shell指令碼中,預設是全域的 預設的環境變數: BASH:說明bash的全路徑 BASH_VERSION CDPATH:用於快速進入目錄 EUID:記錄目前使用者的UID FUNCNAME :在使用者函數體內部,記錄當前函數體的函數名 HISTCMD:記錄下一條命令在history命令中的編號 HISTFILE:記錄history命令的記錄檔案的位置 HISTFILESIZE HOSTNAME HOSTTYPE:主機架構 MACHTYPE:主控件類型的GNU標示 LANG:語言環境 PWD:記錄目前的目錄 OLDPWD:記錄之前目錄 PATH PS1: 命令提示字元,預設是[\[email protected]\h \W]\$,其中\u是使用者名稱,\h是主機名稱,\W是當前工作目錄的basename,\$是使用者UID的替換字元。 定義和使用變數 var=value 注意: 1、=兩邊沒有空格 var = value(X) 2、變數中有空格時必須要用””或’’引起來 取值:${var}或者$var 注意: 1、如果變數值引用的是其他變數,則必須使用雙引號。因為單引號會阻止shell解釋特殊字元$。 2、由於shell是弱變數特性,因此即使在指令碼中沒有定義變數也是可以引用的,從而使得錯誤很難找到。 3、shell具有弱變數的特性,不需要聲明就可以使用,可以設定變數必須先聲明再使用 shopt -s -o nounset 取消變數 unset var 取消函數 unset function 特殊變數 位置參數 $1,...,$n 當n>10時,需要寫成$(n) $0 [email protected]/$* 指令碼所有的參數 $# 指令碼參數總和 指令碼或命令傳回值 $?上一個命令的傳回值,要查看某個命令的傳回值必須在運行中個命令後立即查看$? linux中規定正常的退出命令和指令碼應該以0作為其傳回值,任何非0的傳回值都表示命令未正確退出或正常執行 在自動化指令碼中,也可以通過$?變數的值判斷之前命令的執行狀態,從而採取不同的動作 數組 shell變數是弱類型的,並不要數組的每一個元素都是相同的類型,shell中的數組對元素個數沒有限制,但是只支援一維數組 shell對於陣列變數的聲明非常寬鬆,隨時都可以根據需要增加變數中的元素 定義 declare -a array 初始化 array[0]=0 array[1]=1 array[2]="hello" 或 declare -a array=(0 1 "hello") array[3]=‘waNG‘ 或 array=(‘john‘ ‘sue‘) 或 array=([3]=3 [4]=4 [7]=4) 跳號賦值 數組操作 取值 ${arrayname[index]} 例: 1、echo ${array[0]} //取單個元素 2、echo ${array[@]} //取所有的元素值,得到的是以空格隔開的元素值 3、echo ${array[*]} //取所有的元素值,得到是一整個字串 4、arr1=arr2 //這樣相當於arr1=arr2[0] 長度 利用@或*可以將數組擴充成列表,然後使用#來擷取數組元素的個數 例: 1、echo ${#array[@]} 2、echo ${#array[*]} 通過本例也就知道了求字串的長度,${#string} 截取 截取某個元素的一部分,對象可以是整個數組或某個元素 例: 1、取出數組的第一,第二個元素 echo ${array[@]:1:2} 2、取出第二個元素從第0個開始連續5個字元 echo ${array[2]:0:5} 串連 conn=(${arr1} ${arr2}) 替換數組元素 array=(${array[@]/old/new}) 取消數組或元素 unset array[0] unset array 唯讀變數 readonly RO=100 等效於:declare -r RO=100 變數的範圍 1、shell變數的範圍是在本shell內,屬於本shell的全域變數,也就是從定義該變數的地方開始到shell結束,或者主動使用unset刪除了該變數的地方為止。 2、在函數題內使用local關鍵字聲明了和全域變數同名的局部變數後,對該變數的操作只會影響局部變數,而不會影響與之同名的全域變數。
shell學習筆記之二(變數)