【shell基礎】11、數組初步

來源:互聯網
上載者:User

標籤:數組

一、數組

數組:是一種資料結構,

    資料序列,連續的多個資料,可以使用索引擷取相關元素

聲明數組:

   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、數組初步

相關文章

聯繫我們

該頁面正文內容均來源於網絡整理,並不代表阿里雲官方的觀點,該頁面所提到的產品和服務也與阿里云無關,如果該頁面內容對您造成了困擾,歡迎寫郵件給我們,收到郵件我們將在5個工作日內處理。

如果您發現本社區中有涉嫌抄襲的內容,歡迎發送郵件至: info-contact@alibabacloud.com 進行舉報並提供相關證據,工作人員會在 5 個工作天內聯絡您,一經查實,本站將立刻刪除涉嫌侵權內容。

A Free Trial That Lets You Build Big!

Start building with 50+ products and up to 12 months usage for Elastic Compute Service

  • Sales Support

    1 on 1 presale consultation

  • After-Sales Support

    24/7 Technical Support 6 Free Tickets per Quarter Faster Response

  • Alibaba Cloud offers highly flexible support services tailored to meet your exact needs.