是1種弱類型的變量,聲明時不需要指定其變量類型,也不需要遵守“先聲明后使用”,任什么時候候只要想用就能夠用。
局部變量
在某個shell中生效的變量,在其他shell中無效。可使用local內建命令來“顯示”的聲明局部變量
環境變量
shell腳本中,默許是全局的
預設的環境變量:
BASH:說明bash的全路徑
BASH_VERSION
CDPATH:用于快速進入目錄
EUID:記錄當前用戶的UID
FUNCNAME :在用戶函數體內部,記錄當前函數體的函數名
HISTCMD:記錄下1條命令在history命令中的編號
HISTFILE:記錄history命令的記錄文件的位置
HISTFILESIZE
HOSTNAME
HOSTTYPE:主機架構
MACHTYPE:主機類型的GNU標示
LANG:語言環境
PWD:記錄當前目錄
OLDPWD:記錄之前目錄
PATH
PS1:
命令提示符,默許是[u@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
$@/$* 腳本所有的參數
$# 腳本參數總和
腳本或命令返回值
$? 上1個命令的返回值,要查看某個命令的返回值必須在運行中個命令后立即查看$?
linux中規定正常的退出命令和腳本應當以0作為其返回值,任何非0的返回值都表示命令未正確退出或正常履行
在自動化腳本中,也能夠通過$?變量的值判斷之前命令的履行狀態,從而采取不同的動作
數組
shell變量是弱類型的,其實不要數組的每個元素都是相同的類型,shell中的數組對元素個數沒有限制,但是只支持1維數組
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[*]} //取所有的元素值,得到是1全部字符串
4、arr1=arr2 //這樣相當于arr1=arr2[0]
長度
利用@或*可以將數組擴大成列表,然后使用#來獲得數組元素的個數
例:
1、echo ${#array[@]}
2、echo ${#array[*]}
通過本例也就知道了求字符串的長度,${#string}
截取
截取某個元素的1部份,對象可以是全部數組或某個元素
例:
1、取出數組的第1,第2個元素
echo ${array[@]:1:2}
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關鍵字聲明了和全局變量同名的局部變量后,對該變量的操作只會影響局部變量,而不會影響與之同名的全局變量。
上一篇 BZOJ 4012 HNOI2015 開店 動態樹分治+二分
下一篇 貪心算法原理