標籤:數組
一、數組
數組:是一種資料結構,
資料序列,連續的多個資料,可以使用索引擷取相關元素
聲明數組:
declare -a ARRAYNAME # 可以不事先聲明
初始化賦值:
ARRAYNAME=(“STRING1” "STRING2"...) #使用空格隔開
ARRAYNAME=("STRING1" [4]="STRING2"...)
ARRAYNAME[0]="STRING1" ARRYNAME[3]="STRING3"
擷取數組中所有元素:${ARRARYNAME[@],${ARRAYNAME[*]}
擷取數組中有效元素的總個數:${#ARRAYNAME[@]},${#ARRAYNAME[*]}
擷取某一元素中字串的長度:${#ARRAYNAME[INDEX]} (INDEX=0,1,2,3...)
例:
[[email protected] shell]# echo ${color[0]}red[[email protected] shell]# echo ${color[1]}bule[[email protected] shell]# echo ${color[2]}gree[[email protected] shell]# echo $color[2] red[2][[email protected] shell]# echo $color #數組不指定引用其第幾個元素預設是引用第一個元素red[[email protected] ~]# x=(nihao "s b" [4]=‘ruozhi‘)[[email protected] ~]# echo ${x[5]} [[email protected] ~]# echo ${x[2]}[[email protected] ~]# echo ${x[1]}s b[[email protected] ~]# echo ${x[4]}ruozhi[[email protected] ~]# x=(333 22 4444 555555555)[[email protected] ~]# echo ${#x[1]}2[[email protected] ~]# echo ${#x[3]}9
二、bash偽隨機數產生器
$RANDOM
[[email protected] ~]# echo $RANDOM4852[[email protected] ~]# echo $RANDOM3161[[email protected] ~]# echo $RANDOM23935[[email protected] ~]# echo $[RANDOM%40]26[[email protected] ~]# echo $[RANDOM%40]21[[email protected] ~]# echo $[RANDOM%40]16
練習:
1、列印九九乘法表
[[email protected] shell]# cat 12.sh#!/bin/bashn=(‘1‘ ‘2‘ ‘3‘ ‘4‘ ‘5‘ ‘6‘ ‘7‘ ‘8‘ ‘9‘)for x in $(seq 0 8);do for y in $(seq 0 $x);do echo -e -n "${n[y]}x${n[x]}=$[${n[x]}*${n[y]}]\t" done echodone[[email protected] shell]# bash 12.sh1x1=11x2=2 2x2=41x3=3 2x3=6 3x3=91x4=4 2x4=8 3x4=12 4x4=161x5=5 2x5=10 3x5=15 4x5=20 5x5=251x6=6 2x6=12 3x6=18 4x6=24 5x6=30 6x6=361x7=7 2x7=14 3x7=21 4x7=28 5x7=35 6x7=42 7x7=491x8=8 2x8=16 3x8=24 4x8=32 5x8=40 6x8=48 7x8=56 8x8=641x9=9 2x9=18 3x9=27 4x9=36 5x9=45 6x9=54 7x9=63 8x9=72 9x9=81
2、通過指令碼產生N個隨機數(N>5),對這些隨機數按從小到大排序(冒泡排序)
3、從所有同學們中挑選隨機任意位
三、字串處理
1、字串切片
${#var}:
返回字串變數var的長度
${var:offset}:
返回字串變數var中從第offset個字元後(不包括第offset個字元)的字元開始,到最後的部分,offset的取值0 到${#var}-1 之間
${var: -lengh}:
取字串的最右側幾個字元,使用空格或括弧
${var:offset:number}:
返回字串變數var 中從第offset個字元後(不包括第offset個字元)的字元開始,長度為number的部分
${var:offset: -lengh}:
從最左側跳過offset 字元,一直取到字串的最右側lengh個字元之前(拋頭去尾取中間)(bash4.2後才支援)
截取hello字串:# VAR=‘hello world!‘# echo ${VAR:0:5}hello截取world字串:# echo ${VAR:5:-1}world截取最後一個字元:# echo ${VAR:(-1)} #使用空格隔開也可以!
${#var}:
[[email protected] ~]# name="xie jun"[[email protected] ~]# arr1=(str1 str22 str333)[[email protected] ~]# echo $namexie jun[[email protected] ~]# echo $arr1str1[[email protected] ~]# echo $#name0name[[email protected] ~]# echo ${#name}7[[email protected] ~]# echo ${#arr1} #數組返回的是第一個元素的長度4
${var:offset}:
[[email protected] ~]# echo ${name:0} #從0開始xie jun[[email protected] ~]# echo ${name:1}ie jun[[email protected] ~]# echo ${name:5} #空格也算一個字元un[[email protected] ~]# echo ${name:-5}xie jun[[email protected] ~]# echo ${name: -5} #使用負值要使用空格,負值表示從右往左數e jun[[email protected] ~]# echo ${arr1:1}tr1[[email protected] ~]# echo ${arr1[1]:1}tr22
${var:offset:number}:
[[email protected] ~]# echo ${name:1:1}i[[email protected] ~]# echo ${name:3:3}ju[[email protected] ~]# echo ${name:3:10}jun[[email protected] ~]# echo ${name:10:10}[[email protected] ~]# echo ${name:-1:10} #沒使用空格,無效xie jun[[email protected] ~]# echo ${name: -1:10}n[[email protected] ~]# echo ${name: -5:10}e jun
2、字串截取
${var#*word}:其中word可以是指定的任一字元
功能:
自左而右,尋找var變數所儲存的字串中,第一次出現的word,刪除字串開頭至第一次出現word字元之間的所有字元
${var##*word}:同上,
不同的是,刪除的是字串開頭至最後一次由word指定的字元之間的所有內容(即貪婪模式的刪除)
${var%word*}:其中word可以是指定的任一字元;
功能:
自右而左,尋找var變數所儲存的字串中,第一次出現的word,刪除字串最後一個字元向左至第一次出現word字元之間的所有字元;
${var%%word*}:同上,
只不過刪除字串最右側的字元向左至最後一次出現word 字元之間的所有字元,(貪婪模式);
注意:
支援使用萬用字元,不支援Regex
[[email protected] ~]# str="i very very love linux "[[email protected] ~]# echo ${str#*e}ry very love linux[[email protected] ~]# echo ${str##*e}linux[[email protected] ~]# echo ${str%e*}i very very lov[[email protected] ~]# echo ${str%%e*}i v
3、字串尋找替換
${var/pattern/substi}:
尋找var所表示的字串中,第一次被pattern 所匹配到的字串,以substi替換之
${var//pattern/substi}:
尋找var所表示的字串中,所有能被pattern 所匹配到的字串,以substi 替換之(全域替換)
${var/#pattern/substi}
尋找var 所表示的字串中,行首被pattern所匹配到的字串,以substi替換之
${var/%pattern/substi}
尋找var 所表示的字串中,行尾被pattern 所匹配到的字串,以substi 替換之
${var/pattern[/]}:尋找var 所表示的字串中,刪除第一次pattern 所匹配到的字串
注意:
支援使用萬用字元,不支援Regex
[[email protected] ~]# echo ${str/e.y/sb} #不支援Regexi very very love linux[[email protected] ~]# echo ${str/e?y/sb} #支援萬用字元i vsb very love linux[[email protected] ~]# echo ${str/e[a-z]y/sb}i vsb very love linux[[email protected] ~]# echo ${str//e?y/sb}i vsb vsb love linux[[email protected] ~]# echo ${str/#i/sb}sb very very love linux[[email protected] ~]# echo ${str/%i/sb}i very very love linux[[email protected] ~]# echo ${str/%ux/sb}i very very love linux[[email protected] ~]# echo ${str/%u/sb}i very very love linux[[email protected] ~]# echo ${str/%x/sb}i very very love linux[[email protected] ~]# echo ${str/%?/sb}i very very love linuxsb#尋找刪除(替換為空白)[[email protected] ~]# str="i very very love linux"[[email protected] ~]# echo ${str/%linux}i very very love[[email protected] ~]# echo ${str/%linux/}i very very love[[email protected] ~]# echo ${str/i/}very very love linux[[email protected] ~]# echo ${str/i v/}ery very love linux[[email protected] ~]# echo ${str/i v}ery very love linux[[email protected] ~]# echo ${str/v}i ery very love linux[[email protected] ~]# echo ${str//v}i ery ery loe linux
4、字元大小寫轉換
${var^^}:把var 中的所有小寫字母轉換為大寫
${var,,}:把var 中的所有大寫字母轉換為小寫
[[email protected] ~]# echo ${str^^}I VERY VERY LOVE LINUX[[email protected] ~]# echo ${str,,}i very very love linux
5、變數賦值
${var:-value}:如果var為空白或未設定,那麼返回value ;否則,返回var的值
${var:+value}:如果var不空,則返回value ,否則返回var的值即空值
${var:=value}:如果var為空白或未設定,那麼返回value,並將value賦值給var;否則返回var的值
${var:?error_info}:如果var為空白或未設定,那麼在當前終端列印error_info;否則返回var的值
[[email protected] ~]# echo $stri very very love linux[[email protected] ~]# echo $xj[[email protected] ~]# echo ${str:-xiejun}i very very love linux[[email protected] ~]# echo ${xj:-xiejun}xiejun[[email protected] ~]# echo ${str:xiejun}i very very love linux[[email protected] ~]# echo ${str:+xiejun}xiejun[[email protected] ~]# echo ${xj:xiejun}[[email protected] ~]# echo ${xj:+xiejun}[[email protected] ~]# echo ${str:=xiejun}i very very love linux[[email protected] ~]# echo ${xj:=xiejun}xiejun[[email protected] ~]# echo $xjj[[email protected] ~]# echo ${xjj:?xiejun}-bash: xjj: xiejun[[email protected] ~]# echo $xjj
【shell基礎】11、數組初步