數組:存儲多個元素的連續的內存空間,相當于多個變量的集合
1)定義數組:
declare -a ARRAY_NAME 定義普通數組 可省略declare -a
]#arr=(a b c d e f)
declare -A ARRAY_NAME 定義關聯數組 即可自定義索引,可為字符、字符串等
2)索引:
類似于C語言,數組元素的下標由0開始編號。關聯數組則由對應的鍵
3)數組元素賦值:
1.一次附值一個元素:
array_name[0]=value0
2.一次賦值全部元素: 中間空格隔開;若某個值中含空格則需引號
ARRAY_NAME=("VAL1" "VAL2" "VAL3" …)
3.只賦值特定元素: 可不連續的賦值
ARRAY_NAME=([0]="VAL1" [3]="VAL2" …)
4.交互式數組值對賦值:不可管道傳遞數據
read -a ARRAY
4)數組的長度 元素的個數 非索引
${#ARRAY_NAME[*]}
${#ARRAY_NAME[@]}
5)數組操作:
1.引用數組中的元素:
${ARRAY_NAME[INDEX]} 省略[INDEX]則默認引用第一個元素,即arr[0]
利用下標獲取數組中指定的元素,下標可以是整數或算術表達式,其值應大于或等于0。
所有元素:${ARRAY[@]}, ${ARRAY[*]}
數組切片:${ARRAY[@]:offset:number}
offset: 要跳過的元素個數
number: 要取出的元素個數
取偏移量之后的所有元素
${ARRAY[@]:offset}
]#echo ${arr[*]:2:3} c d e
顯示數組arr第2個元素之后的3個元素
2.指定刪除數組中的某個元素
unset ARRAY[INDEX]
練習 冒泡排序:
#!/bin/bash #zjj for((i=0;i<10;i++));do rand[$i]=$RANDOMdone echo ${rand[@]} echo --------------------- for((j=0;j<10;j++));do for((k=j;k<9;k++));do if [ ${rand[$j]} -gt ${rand[$[k+1]]} ];then tmp=${rand[$j]} rand[$j]=${rand[$[k+1]]} rand[$[k+1]]=$tmp else continue fi done done echo ${rand[@]}
===============>
字符串處理:
僅顯示有變化,未對變量值進行更改
]#var=123456
1)字符串切片:
${#var}:返回字符串變量var的長度
]# echo ${#var} 6
${var:offset}:返回字符串變量var中從第offset個字符后所有字符
offset取值在0 到${#var}-1 之間
]# echo ${var:2} 3456
${var:offset:number}:返回字符串變量var中從第offset個字符后number個字符
]# echo ${var:2:3} 345
${var: -lengh}:取字符串的最右側幾個字符
注意:冒號后必須有一空白字符
]# echo ${var: -2} 56
${var:offset:-lengh}:從最左側offset字符之后,到最右側lengh個字符之前
(bash4.2后,允許為負值)
]# echo ${var:2: -1} 345
2)基于模式取子串
]#var=root:x:0:0:root:/root:/bin/bash
1.自左而右:
${var#*word}:其中word可以為指定的任意字符
刪除第一次出現的word及其前面的字符
]# echo ${var#*root} :x:0:0:root:/root:/bin/bash
${var##*word}:
同上,不同的是,刪除到最后一個匹配到的字符
]# echo ${var##*root} :/bin/bash
2.自右而左:
${var%word*}:其中word可以是指定的任意字符;
刪除自右向左第一個word及其后面的字符
]# echo ${var%root*} root:x:0:0:root:/
${var%%word*}:
同上,不同,刪除自右向左最后一次出現word及其后的所有字符
]# echo ${var%%root*}
3)查找替換、刪除:
${var/pattern/substi}:
第一次 被pattern所匹配到的字符串,以substi替換之
${var//pattern/substi}:
所有 被pattern所匹配到的字符串,以substi替換之
${var/#pattern/substi}:
行首 被pattern所匹配到的字符串,以substi替換之
${var/%pattern/substi}:
行尾 被pattern所匹配到的字符串,以substi替換之
刪除:
${var/pattern}:查找var值中,刪除第一次被pattern所匹配到的字符串
${var//pattern}:所有
${var/#pattern}:行首
${var/%pattern}:行尾
4)字符大小寫轉換:
${var^^}:把var中的所有小寫字母轉換為大寫
${var,,}:把var中的所有大寫字母轉換為小寫
變量賦值:
${var:-value}:如果var為空或未設置,那么返回value;否則,則返回var的值
${var:+value}:如果var不空,則返回value,否則返回空值
${var:=value}:var為空或未設置,那么返回value,并將value賦值給var;否則,則返回var的值
${var:?error_info}:var為空或未設置,那么在當前終端打印error_info;否則,則返回var的值
#declare [選項] 變量名
-r 將變量設置為只讀屬性
-i 將變量定義為整型數
-a 將變量定義為數組
-A 將變量定義為關聯數組
-f 顯示此腳本前定義過的所有函數名及其內容
-F 僅顯示此腳本前定義過的所有函數名
-x 將變量聲明為環境變量
-l 將變量值轉為小寫字母declare –l var=UPPER
-u 將變量值轉為大寫字母declare –u var=lower
間接變量引用:
第一個變量的值是第二個變量的名字,
從第一個變量引用第二個變量的值稱為間接變量引用
var1=var2
var2=value
此時打印var1的值為var2,非value
bash Shell提供了兩種格式實現間接變量引用
eval var3=\$$var1 eval命令 對變量進行兩次掃描
echo ${!var1}
]# var1=var2 ]# var2=zjj ]# echo ${!var1} zjj ]# eval var3=\$$var1 ]# echo $var3 zjj
#mktemp[OPTION]… [TEMPLATE] 創建臨時文件(隨機文件名)可避免沖突
-d 創建臨時目錄
-p DIR 指定臨時文件所存放目錄的位置
TEMPLATE: filename.XXX
X至少要出現三個,代表幾個隨機字符
#install 安裝復制文件 編譯安裝時常用 可直接將二進制文件賦予權限
-m MODE 指定權限 默認755
-o OWNER 指定屬主
-g GROUP 指定屬組
原創文章,作者:Jasper,如若轉載,請注明出處:http://www.www58058.com/39259