shell 腳本中數組的總結

描述:

  變量是存儲單個元素的內存空間,而數組是多個變量的集合,是一個連續的空間;但整個數組只能有

的名字。

  數組內的數據都有指定的索引,從而找到數組內所指定的數據。索引的編號是從0開始的,依次遞增(0,1,2,3,…),這種方式叫數值索引。格式為:數組名[索引];${ARRAY_NAME[INDEX]}。索引也支持自定義的格式,也被稱為關聯索引,在bash4.0版本后開始支持。bash的數組也支持稀疏格式,即索引不連續(0,2,4,7,8,…)

用法:

1,使用數組需事先聲明,格式如下:

  declare -a ARRAY_NAME  (聲明索引數組)

  declare -A ARRAY_NAME  (聲明關聯數組)

2,數組中元素的賦值方式:

1),一次只賦值一個元素

 ARRAY_NAME[INDEX]=value

[root@localhost ~]# weekdays[0]="Sunday"
[root@localhost ~]# echo ${weekdays[0]}
Sunday

2),一次賦值全部元素:

 ARRAY_NAME=("VAL1" "VAL2" "VAL3"…)

[root@localhost ~]# weekdays=("Sunday" "Monday" "Tuesday" "Wednesday" "Thursday" "Friday" "Saturday" )
[root@localhost ~]# echo ${weekdays[6]}
Saturday
[root@localhost ~]# echo ${weekdays[5]}
Friday
[root@localhost ~]# echo ${weekdays[0]}   第一個元素的索引號是從0開始編號的
Sunday

3),只賦值特定元素

 ARRAY_NAME=([0]="VAL1" [3]="VAL4"…)

[root@localhost ~]# weekdays=([0]="Sunday" [2]="Tuesday" [5]="Saturday")
[root@localhost ~]# echo ${weekdays[0]}
Sunday
[root@localhost ~]# echo ${weekdays[2]}
Tuesday
[root@localhost ~]# echo ${weekdays[5]}
Saturday

4),read -a ARRAY_NAME

[root@localhost ~]# read -a number
123 456 789

3,數組的引用

引用數組中的元素:${ARRAY_NAME[INDEX]}

注意:引用時,只給數組名,表示引用下標為0的元素

   ${ARRY_NAME[*]}

   ${ARRY_NAME[@]}

數組的長度:(數組中元素的個數)

   ${#ARRY_NAME[*]}

   ${#ARRY_NAME[@]}

[root@localhost ~]# weekdays=("Sunday" "Tuesday" "Saturday")
[root@localhost ~]# echo ${weekdays[0]}
Sunday
[root@localhost ~]# echo ${weekdays[*]}
Sunday Tuesday Saturday
[root@localhost ~]# echo ${weekdays[@]}
Sunday Tuesday Saturday
[root@localhost ~]# echo ${#weekdays[@]}
3
[root@localhost ~]# echo ${#weekdays[*]}
3

示例:

1,隨機生成10個數,并找出其中的最大值和最小值

[root@localhost ~]# cat sum.sh
#!/bin/bash
declare -a rand
declare -i max
declare -i min
for i in {0..9};do
    rand[$i]=$RANDOM
    echo ${rand[$i]}
    if [ $i -eq 0 ];then
     max=${rand[$i]}
     min=${rand[$i]}
    else
      [ "$max" -lt "${rand[$i]}" ] && max=${rand[$i]}
      [ "$min" -gt "${rand[$i]}" ] && min=${rand[$i]}
    fi
done
echo "MAX:$max"
echo "MIN:$min"
[root@localhost ~]# bash sum.sh
21586
1730
19008
16138
17576
3909
206
27706
3824
11997
MAX:27706
MIN:206

處理數組數據:

  語法

       描述

${!array[*]}

列出所有元素所對應的索引號
${!array[@]} 列出所有元素所對應的索引號
${array[*]} 列出關聯數組的所有元素
${array[@]} 列出關聯數組的所有元素
${#[array[*]} 關聯數組的長度(元素個數)
${#[array[@]} 關聯數組的長度(元素個數)

示例:

設置數組:

[root@localhost ~]# weekdays=("Sunday" "Tuesday" "Saturday")

1,列出數組中所有元素所對應的索引號

[root@localhost ~]# echo ${!weekdays[*]}
0 1 2
[root@localhost ~]# echo ${!weekdays[@]}
0 1 2

2,列出數組中所有的元素

[root@localhost ~]# echo ${weekdays[@]}
Sunday Tuesday Saturday
[root@localhost ~]# echo ${weekdays[*]}
Sunday Tuesday Saturda

3,顯示數組中元素的個數

[root@localhost ~]# echo ${#weekdays[*]}
3
[root@localhost ~]# echo ${#weekdays[@]}
3

數組切片:

格式為:${ARRY_NAME[@]:offset:number}

       offset:要路過的元素的個數

       number:要取出的元素個數

     ${ARRAY_NAME[@]:offset}:取偏移量之后的所有元素

示例:

[root@localhost ~]# weekdays=("Sunday" "Monday" "Tuesday" "Wednesday" "Thursday" "Friday" "Saturday")
[root@localhost ~]# echo ${weekdays[@]:3:2}
Wednesday Thursday
[root@localhost ~]# echo ${weekdays[@]:2}
Tuesday Wednesday Thursday Friday Saturday

向非稀疏格式數組中追加元素:

    ARRAY_NAME[${#ARRAY_NAME[*]}]=

[root@localhost ~]# number=(2 4 6 8)
[root@localhost ~]# echo ${number[*]}
2 4 6 8
[root@localhost ~]# number[${#number[*]}]=10
[root@localhost ~]# echo ${number[*]}
2 4 6 8 10

刪除數組中的某元素:

    unset ARRAY[INDEX]

[root@localhost ~]# unset number[3]
[root@localhost ~]# echo ${number[*]}
2 4 6 10

關聯數組

  declare -A ARRAY_NAME

  ARRAY_NAME=([index_name1]="value1" [index_name2]="value2"…)

[root@localhost ~]# declare -A num
[root@localhost ~]# num=([jishu]="1 3 5" [oushu]="2 4 6 8")
[root@localhost ~]# echo ${num[jishu]}
1 3 5
[root@localhost ~]# echo ${num[oushu]}
2 4 6 8

示例:

輸入若干個數值存入數組中,采用冒泡算法進行升序或降序排序

[root@localhost ~]# cat maopao.sh
#!/bin/bash
#sorting following array
echo "Please input a number list: "
read -a arr
for ((i=0;i<${#arr[@]};i++));do
   for ((j=${#arr[@]}-1;j>i;j--));do
#echo $j
 if [[ ${arr[j]} -lt ${arr[j-1]} ]];then
    t=${arr[j]}
    arr[j]=${arr[j-1]}
    arr[j-1]=$t
 fi
    done
done 
echo "after sorting: "
echo ${arr[@]}
[root@localhost ~]# bash maopao.sh 
Please input a number list: 
5 1 4 2 3 0
after sorting: 
0 1 2 3 4 5

原創文章,作者:pingsky,如若轉載,請注明出處:http://www.www58058.com/41225

(1)
pingskypingsky
上一篇 2016-08-29
下一篇 2016-08-29

相關推薦

  • 日志分析工具Awstats實戰之Apache篇-多站點日志分析

    原創作品,允許轉載,轉載時請務必以超鏈接形式標明文章 原始出處 、作者信息和本聲明。否則將追究法律責任。http://nolinux.blog.51cto.com/4824967/1318052 前面兩篇都在講述如何去部署nginx下的awstats日志分析工具,現在終于輪到apache。作為老牌的網頁服務器,awstats對apache…

    Linux干貨 2016-08-15
  • Linux 第九天: Linux Shell腳本編程

    Linux 第九天: (08月11日) Linux Shell腳本編程     Shell腳本是包含一些命令或聲明, 并符合一定格式的文本文件格式要求 運行shebang機制#!/bin/bash   bash -n /path/to/some_script  檢測腳本中的語法錯誤bash -x /path/to/so…

    Linux干貨 2016-08-15
  • linux文件管理類命令學習總結練習

    1、常用文件管理類命令:cp, mv, rm   cp: copy命令       單元復制 cp [OPTION]… [-T] SOURCE DEST                     DEST不存在…

    Linux干貨 2016-11-06
  • HTTP的基礎配置

    目錄: 1.修改監聽的IP和PORT 2.持久連接(保持連接,長連接) 3.MPM 4.DSO 5.定義’Main’ server_name的文檔頁面路徑 6.站點訪問控制常見機制 7.定義站點主頁面: 8.定義路徑別名 9.設定默認字符集 10.日志設定 11.基于用戶的訪問控制 12.虛擬主機 13.status頁面 14.cur…

    Linux干貨 2017-08-08
  • linux 學習(2)

    1 linux 常見的文件管理命令都有哪些?其常用的使用方法。 ls 文件列出命令   常見選項  -l 顯示長文本信息          -d 顯示當前目錄信息          -a 顯示所有文件信息     &nb…

    Linux干貨 2016-10-09
欧美性久久久久