歡迎來到Linux教程網
Linux教程網
Linux教程網
Linux教程網
您现在的位置: Linux教程網 >> UnixLinux >  >> Linux編程 >> SHELL編程

輕松掌握shell編程中數組的常見用法及示例

緣起:在老男孩進行linux培訓shell編程教學中,發現不少水平不錯的網友及同學對數組仍然很迷糊,下面就給大家分享下數組的用法小例子,希望能給大家一點幫助。其實SHELL的數組很簡單,好用。我們學習都應該遵循簡單、易用的原則。
 
shell編程中數組的簡單用法及示例
新版本的Bash支持一維數組. 數組元素可以使用符號variable[xx]等方式來初始化. 另外, 腳本可以使用declare -a variable語句來指定一個數組等。要引用一個數組元素(也就是取值), 可以使用大括號, 訪問形式為${variable[xx]},當然了,下面是一些老男孩經常使用的方法和對數組的一點理解,如有高見,歡迎指導,先謝謝博友們了。
 
1.1 shell數組的常用定義方法:
 1)方法一:
 命令法:
 dir=($(ls .))
 
范例1:手工命令行操作演示
 [root@ www.linuxidc.com  scripts]# dir=($(ls .))
 [root@ www.linuxidc.com  scripts]# ls .
  www.linuxidc.com .log  apachemon.sh  httpdctl
 
[root@ www.linuxidc.com  scripts]# echo ${#dir[*]} <==查看數組的長度
 3
 
命令行循環打印數組元素:
 for ((i=0; i<`echo ${#dir[*]}`; i++))
 do
    echo -e "${dir[$i]}\n"
 done
 
范例2:通過腳本定義及輸出數組元素:
 [root@ www.linuxidc.com  scripts]# cat printarray.sh
dir=($(ls .))
 for ((i=0; i<`echo ${#dir[*]}`; i++))
 do
    echo -e "${dir[$i]}\n"
 done
 [root@ www.linuxidc.com  scripts]# sh printarray.sh 
www.linuxidc.com .log
 
apachemon.sh
 
httpdctl
 
printarray.sh
 ====================================================
 2)方法二:列舉元素法
 array=(red green blue yellow magenta)
 array=(
  www.linuxidc.com 
  zhangyue
  zhangyang
 )
 范例3:列舉元素法的腳本例子
 [root@ www.linuxidc.com  ~# cat test.sh
array=(
  www.linuxidc.com 
 zhangyue
 zhangyang
 )
 
for ((i=0; i<`echo ${#array[*]}`; i++))
 do
    echo "${array[$i]}"
 done
 echo ----------------------
 echo "array len:${#array[*]}
 [root@ www.linuxidc.com  ~# sh test.sh
www.linuxidc.com 
 zhangyue
 zhangyang
 
3)方法3:其實方法一一樣,具有實戰價值因此單獨列出講解
 judge=($(curl -I -s ${url_list[$i]}|head -1|tr "\r" "\n"))
 
范例4:比較專業的生產檢查URL地址的腳本(shell數組方法):
 [root@ www.linuxidc.com  ~]# cat check_url.sh
#!/bin/bash
 # this script is created by www.linuxidc.com .
 # e_mail:[email protected]
 # qqinfo:49000448
 # function:check web url
 # version:1.1
 . /etc/init.d/functions
 
url_list=(
 http://linuxidc.com
 http://www.88181.com
 http:// www.linuxidc.com
 )
 
function wait()
 {
 echo -n '3秒後,執行該操作.';
 for ((i=0;i<3;i++))
 do
  echo -n ".";sleep 1
 done
 echo
 }
 function check_url()
 {
 wait
 echo 'check url...'
 for ((i=0; i<`echo ${#url_list[*]}`; i++))
 do
 # HTTP/1.1 200 OK
 judge=($(curl -I -s ${url_list[$i]}|head -1|tr "\r" "\n"))
 if [[ "${judge[1]}" == '200' && "${judge[2]}"=='OK' ]]
    then
    action "${url_list[$i]}" /bin/true
 else
    action "${url_list[$i]}" /bin/false
 fi
 done
 }
 check_url
 [root@ www.linuxidc.com  ~]# sh check_url.sh 
3秒後,執行該操作....
 check url...
 http://linuxidc.com [  OK  ]
 http://www.88181.com [  OK  ]
 http:// www.linuxidc.com [  OK  ]
 提示:上述結果是帶顏色的。
 
---------------------------------------------------------
 1.2 閱讀博文後可以練習的小例子
 問題1: 把1-3 3個數字存到數組裡 分別乘以8 然後依次輸出。
 解答:
 
問題2:一個SHELL腳本: www.linuxidc.com .sh內容為定義一個數組array=(1 2 3)
 要打印數組元素的個數。
 要求:要把數組array當作變量在執行腳本時傳參到腳本裡使用(這塊是本題的難點)
 例如:這樣執行 sh www.linuxidc.com .sh array
Copyright © Linux教程網 All Rights Reserved