shell腳本編程之數組

bash僅支持一維數組,類型聲明:

declare -i    : 表示數值

declare -a  :表示普通數組(默認,可不用聲明類型)

declare -A :表示關聯數組(必須聲明類型,bash需4.0以上版本才支持,可通過bash –version查看版本


一、普通數組(用數字為下標)

1.1數組賦值(修改值)方式

a).單個元素賦值

a[0]=1
a[2]=2

b).一次對全部元素賦值

a=(1 2 3)

c).按索引進行賦值

a=([0]=apple [1]=banana [2]=orange)

d).命令替換

a=(/var/log/*.log)

e).用戶輸入

read -a array

1.2數組長度   

echo ${#array[@]}   數組的長度(建議查看方式)
echo ${#array[*]}   數組的長度

用以下示例來區分兩者區別:

1.png

執行結果如下($*用雙引號引起來后,所有的參數是一個串,查看所有元素時建議用$@):

2.png

1.3其它常用

echo {array[2]}         下標為2的元素值(元素從0開始計數)   
array2=(${array1[@]})   數組復制
echo ${!array[@]}       獲取所有的下標


二、關聯數組(可用非數字字符做下標,普通數組功能在關聯數組下都可實現)

關聯數組需事先聲明,方法為:declare -A array

示例:

[root@localhost ~]# declare -A test
[root@localhost ~]# test=([apple]=a [banana]=b [orange]=o)
[root@localhost ~]# echo ${test[@]}
o a b
[root@localhost ~]# echo ${!test[@]}
orange apple banana
[root@localhost ~]#


三、數組切片

${array[@]:offset:number}   offset: 偏移的元素個數    number: 取出的元素的個數
${array[@]:offset}          取出偏移量后的所有元素
${array[@]}                 取出所有元素

示例:

[root@localhost ~]# array=(1 2 3)
[root@localhost ~]# echo ${array[@]}
1 2 3
[root@localhost ~]# echo ${array[@]:1}
2 3
[root@localhost ~]# echo ${array[@]:1:1}
2


四、刪除數組元素

unset ARRAY[index]

示例:

[root@localhost ~]# echo ${array[@]}
1 2 3
[root@localhost ~]# unset array[1]
[root@localhost ~]# echo ${array[@]}
1 3


五、綜合示例

示例1:寫一個腳本,生成10個隨機數,保存至數組中;而后顯示數組下標為偶數的元素;

方法一:

3.png

方法二:

4.png

示例2:復制一個數組中下標為偶數的元素至一個新數組中

5.png

示例3:生成10個隨機數,升序排序

6.png

示例4:打印九九乘法表

7.png

原創文章,作者:老鼠上了貓,如若轉載,請注明出處:http://www.www58058.com/7109

(0)
老鼠上了貓老鼠上了貓
上一篇 2015-08-24 21:33
下一篇 2015-08-24 21:44

相關推薦

  • bash功能特性四 文件名通配符

    文件名通配(globbing)     通配符在bash中是一個非常有用的功能,它可以使我們更加方便的查找符合特定條件的文件。     文件通配符的包括以下幾種:          *:任意長度的任意…

    Linux干貨 2015-04-21
  • Linux用戶和組管理

    Linux用戶和組管理 Username / UID 管理員:root,0 普通用戶 : 1–65535 系統用戶 :系統已經已經存在專門用來對系統服務或者系統資源進行管理的 1–499(CentOS 6.X) 1–999 (CentOS 7.X) 登錄用戶:平時專門做系統管理的用戶 500+ (CentOS 6.X) 1000+ (CeentOS 7.X)…

    Linux干貨 2017-04-01
  • 軟件包管理

    rpm 與 yum 的用法 源代碼:name-VERSION.tar.gz|bz2|xz VERSION: major.minor.release ?rpm包命名方式: name-VERSION-release.arch.rpm 例:bash-4.2.46-19.el7.x86_64.rpm VERSION: major.minor.release rele…

    Linux干貨 2016-09-01
  • 馬哥教育網絡班21期-第6周課程練習

    第6周課程練習 請詳細總結vim編輯器的使用并完成以下練習題   1、         復制/etc/rc.d/rc.sysinit文件至/tmp目錄,將/tmp/rc.sysinit文件中的以至少一個空白字符開頭的行的行首加#; # cp /etc/rc.d/rc.s…

    Linux干貨 2016-08-30
  • 負載均衡LVS原理及其應用

    一、LB常用解決方案     1. 硬件負載均衡解決方案:          F5公司: BIG-IP         Citrix公司: …

    Linux干貨 2015-12-28
  • iptables

    iptables 包過濾型的防火墻 Firewall:防火墻,隔離工具;工作于主機或網絡邊緣,對于進出本主機或本網絡的報文根據事先定義的檢查規則作匹配檢測,對于能夠被規則匹配到的報文作出相應處理的組件; 主機防火墻網絡防火墻 軟件防火墻(軟件邏輯)硬件防火墻(硬件和軟件邏輯) 版本 ipfw (firewall framework):命令行工具,生成規則并送…

    Linux干貨 2017-06-13

評論列表(2條)

  • stanley
    stanley 2015-08-24 21:43

    實戰的案例非常有不錯,很有吸引力

    • 老鼠上了貓
      老鼠上了貓 2015-08-27 19:18

      @stanley謝謝!

欧美性久久久久