一、數組
1、 是一段連續的變量,一段連續的內存存儲空間
2、 解決了變量過多的問題;在同一類變量中,我們不需要去定義多個名字,二十以數組的方式來定義;(列表)
(1) 數組值
(2) 索引
(3) 值
3、 如何定義數組:
(1)declare -i 定義整數(申明)
(2)declare -a 定義數組array
(3)declare -A 定義數組嵌套
a[1]=b
b[1]=c
c[1]=d
【這樣的數組值,在bash中不常用】
4、 如何給數組賦值
array=()
1、 array[0]=zz (在計算機語言中,索引一般從0開始計算)
(索引並不一定是數字:key-value array[zz]=1.87m)
(shell中數組賦值,可以跳躍(條約賦值))
2、 array=(/var/log/*.log)
做遍歷
array=(a b c d e)
3、 array=(‘zz=187’ ‘aaa=186’)
4、 通過read命令來賦值
(1)read -t 延遲 -p “指定說明” -a 輸入數組所需的變量值
(2)read -a a b c d e
5、 如何去調用數組:
$[變量名]
${數組名[索引]} 定義的是哪個索引你,就看到是對應索引指定的值
${數組名} 默認調用 索引=0 的值
${數組名[*]}或者 ${數組名[@]}調用數組內所有的值
(1)調用數組的數組長度
length(“變量”)
${#變量名[*]}或者 ${#變量名[@]}
(2)添加數組值的特殊方式
${變量名[${#變量名[@]}]}=“值” 或者 ${變量名[${#變量名[*]}]}=值
(3)關於數組的其他操作
數組切片
${變量名[@]:偏移量:所需要取出值的個數}
echo ${a[*]:2:4}
${變量名[@]:偏移量}
刪除值
unset ${變量名[索引]}
注意:刪除是索引所對的值,而沒有帶着索引一塊刪除;
【知道值,如何查看索引?】
修改值
A[3]=c
A[3]=d 覆蓋即修改
二、字符串
1、 字符串切片:
數組切片:${變量名[@]:偏移量:數值個數}
字符串切片: ${變量名:偏移量:數值個數}
${變量名:-數值個數} 【*注意:冒號后面一定要加空格*】
${變量名:-word} 默認賦值的意思
2、 基於模式取子字符串
(1)從左到右
${變量名#pattern} 刪除pattern第一次匹配到的字串
${變量名##pattern} 刪除所有pattern匹配到的字串
(2)從右向左
${變量名%pattern} 刪除pattern第一次匹配到的字串
${變量名%%pattern} 刪除所有pattern匹配到的字串
3、 字符替換
(1)${變量名/pattern/替換后的字符串}
匹配第一個pattern,來進行替換 【pattern並不是正則表達式,而是文件通配符】
(2)${變量名//pattern/替換后的字符串}
匹配所有的pattern,並進行替換
(3)${變量名/#pattern/替換后的字符串}
指定匹配行首必須是pattern,才會替換
(4)${變量名/%pattern/替換后的字符串}
指定匹配行尾必須是pattern,才能替換
注意:/ 分隔符,不能替換為(#%等特殊字符,和sed不一樣)
4、 查找並刪除
替換中,不指定替換字符串,即為刪除
${變量名/pattern}
${變量名//pattern}
${變量名/#pattern}
${變量名/%pattern}
5、 替換大小寫
(1)tr 替換大小寫
tr [[:lower:]] [[:upper:]] < filename
(2)${變量名^^} 將字符串全部替換為大寫
(3)${變量名,,} 將字符串全部替換為小寫
6、 變量賦值
變量1=${變量名2:-word} 注意沒有空格! 輸入默認值的作用
變量1=${變量名2:+word} 不常用 變量2有值的情況下,才將word默認值賦值給變量1
7、腳本應用其他文件中的變量,如何實現?
filename1
vim filename1
a=1
b=2
:wq
vim filename1.sh
. /全路徑/filename 后者 source /全路徑/filename //執行整個代碼
c=$[$a+$b]
ehco $c
:wq
bash filename1.sh
練習:修改hostname,定義一個 hostname文件 name=xxx ,hostname.sh
8、兩個命令
mktemp 創建臨時文件以及目錄 temp -- /tmp
避免大家取的文件名字重復;mktemp 名字.XXXXXX (XX代表隨機數(字母和數字))
默認創建是隨機的文件
-d 創建的就是隨機的 目錄
file=`mktemp a.XXXX`
install 復制或刪除文件,用法同copy
優點:可以指定權限來復制文件
用法:intall a文件 b目錄 //復制a文件到b目錄,並回復初始權限(文件:755 目錄:644)
-t 源目對換
-d 創建
-m MODE
-o OWNER
-g GROUP
9、練習:
(1)獲取此命令所依賴的所有庫文件的列表
(2)復制命令至某目標目錄(例如/mnt/sysroot)下的對應路徑下
(3)復制此命令所依賴的所有庫文件至目標目錄下的對應路徑下/lib64/ld-linux-x86-64.so.2 /mnt/sysroot/lib64/ld-linux-x86-64.so.2每次復制完成一個命令后,不要退出,而是提示用戶輸入新的復制的命令,並重復完成上述功能,直到用戶輸入quit退出;