關于變量的内容
一、變量命名:
二、變量指派:
三、變量類型:
四、變量取消:
五、取得變量值:
六、調整變量的屬性
七、數組
八、變量擴充:
九、指令擴充:
一、變量名稱:
1、隻能包含字母、數字和下劃線,并且不能以數字開頭,
2、不應該跟系統中已有的環境變量重名
3、最好能見名知意
設定變量:
變量名稱=值
var_name=value 等号兩邊不能有空格
1
2
3
針對數字,你可以可以這樣為變量指派,定義一個變量的類型
三、bash:變量類型:
環境變量:
本地變量(局部變量):
位置變量:
特殊變量(系統變量):
本地變量:作用域為整個bash程序
varname=value
局部變量:作用域隻對目前代碼段有效
local varname=value
環境變量:作用域為目前shell程序及其子程序
export varname=value "導出“
任意腳本在執行時會啟動一個子shell程序,
指令行中啟動的腳本會繼承目前shell的環境變量
系統自動執行的腳本(跟指令行無關)就需要自我定義需要的各環境變量
位置變量:
$1,$2,....
特殊變量:保持某些特殊資料
$? 上一個指令執行狀态傳回值
$# 參數的個數
$* 參數清單
$@ 參數清單
$0 指令本身 腳本本身
執行腳本時的腳本路徑及名稱
程式執行一般有兩類傳回值
程式執行結果;
執行狀态傳回代碼(0-255)
0表示正确
1-255:錯誤執行 1,2,127 系統預留 有特殊意義
四、撤銷變量:
unset varname
[root@lovelace 51cto]# unset youname;echo $youname
檢視目前shell中的變量
set 不帶任何參數和選項
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
如果檢視目前shell中的環境變量
env
export
printenv
字元串變量添加新的變量
PATH添加新的路徑
export PATH=$PATH:/usr/local/apsch/bin
$變量名稱
${變量名稱} $(x) 這個可以用來當做指令調用
如果變量在語句當中被引用,必須要使用${x}才可以,取得數組的變量值時候也需要使用${}來調用
關于變量和引号的關系:
單引号:所見即所得
雙引号:使特殊符号生效
六、調整變量的屬性:
1、readonly 指令 :定義隻讀變量
-p:顯示目前具有隻讀屬性的變量清單
-f:設定函數不可修改
-a:定義數組不可修改
2、declare 指令
-r:設定隻讀變量
-p:顯示變量的屬性
-a:變量是一個數組
-f:搜尋指令時,隻找函數
-i:變量是一個整數
-F:顯示所有的函數式名稱及其屬性
-t:設立變量具有trace屬性
-x:設定環境變量
七、 數組:
是一種資料結構,有相關的資料項組成,每個資料項,稱為數組的元素,且可采用索引的方式取得個元素的值
數組指派:
1、單個指派,以index作為索引号,索引号從0開始
a[0]=1
a[2]=2
a[3]=3
2、使用小括号為數組指派
a=(1 2 3) 預設空格隔開
3、為數組中的某一個資料項指派,預設是從0開始,如果中間出現未比标示的索引項,則從前一個索引項開始計算
a={51 [3]=5 cto [6]=8}
顯示指派:
echo ${a[1]}
取出數組中所有的值:
echo ${a[@]} 或者echo ${a[*]}
取得數組元素的個數:
echo ${#a[@]} 或者 echo ${#a[*]}
八、進階變量:
${變量名稱} 變量擴充
$(指令) 指令替換
$((算術式)) 算術擴充
$(指令) 指令替換:
測試變量存在與否:
${myname:-'nick'} 判斷條件,如果myname存在,就傳回值,如果myname不存在,就把-後接的字元串當做整個變量擴充的結果,并傳回
測試變量不存在或為空,傳回一個預設值
${myname:-'nick'} 如果待測變量不存在或為空,傳回-後的值,存在則傳回變量的值
測試變量不存在或為空,給變量設定一個預設值
${count:=100} 若變量coutn沒有值或為空,則把待測變量設定為預設值,
測試變量不存在或為空,傳回錯誤資訊
${myname:?"your input error"}
測試變量的存在性:
${myname:+Ture} 若變量存在且值非空,則符合判斷
: 空 測空置
- 負向 測不存在
+ 正向 測存在
? 有問題 檢查是否完備後再來執行吧
= 設值 給控值變量設定一個預設值
$(指令) 指令替換 此指令等同于·· (esc下的按鍵,不是單引号)這個在編寫腳本的時候很有用
$((算術式))算術擴充:這個我們在下章将會單獨講解,這裡給出示例檢視
九、變量擴充“去字元串切片,字元串長度
字元串切片是從0開始的 在使用${}的時候 大括号内的變量引用前面的$可以不寫
${變量:位置起點} ${myname:3}
${變量:位置起點:長度}
取部分參數:
指令行參數是從$1開始的依次類推,$@代表所有參數,指令本身使用$0來表示
${@:起點}:由點開始,取得後面的所有的位置參數
${@:起點:個數}:由起點開始,取得指定個數的位置參數
示例腳本
執行結果:
計算字元串長度:
${#變量名稱}:傳回變量值的字元串長度
expr:也可以統計字元串的長度
1、str="here you are."
len$(expr length "$str")
echo "str 字元串長度是:$len"
2、expr "字元串“:‘。*’
str="here you are."
len=$(expr "$str":'.*')
echo "str字元串長度是:$len"
變量擴充:對比樣式
由字元串前面對比,删除最短的
${變量#樣式}
由字元串前面對比,删除最長的
${變量##樣式}
由字元串後面對比,删除最短的
${變量%樣式}
由字元串後面對比,删除最長的
${變量%%樣式}
至于對比樣式可以根據自己的思考來獲得,這個沒有固定的格式
取代或删除部分字元串:
隻替換第一個對比符合的字元串
${變量/樣式/替換字元串}
替換所有符合的字元串
${變量//樣式/替換字元串}
删除對比符合的字元串
隻删一個
${變量/樣式/}
删除全部
${變量//樣式/}
#T 行首位置
%LE 最後面
變量擴充:取變量名稱清單、數組索引清單
取變量名稱清單:
${!開頭字元串@}或${!開頭字元串*}
取數組索引清單:
${!數組變量[@]}或${!數組變量[*]}
後記:學習shell程式設計,變量這一塊很重要,文章中列出的僅僅是變量内容的一部分,還有很多像系統内置變量,以及環境變量,局部變量之間的轉化,我們這裡沒有提及到,是以需要我們多練習、多總結。就算你一下記不住這麼多知識,熟能生巧總是可以的吧......
本文出自 “追馬” 部落格,請務必保留此出處http://lovelace.blog.51cto.com/1028430/1211141