本文共 3433 字,大约阅读时间需要 11 分钟。
缘起:在老男孩进行linux培训shell编程教学中,发现不少水平不错的网友及同学对数组仍然很迷糊,下面就给大家分享下数组的用法小例子,希望能给大家一点帮助。其实SHELL的数组很简单,好用。我们学习都应该遵循简单、易用的原则。
shell编程中数组的简单用法及示例
新版本的Bash支持一维数组. 数组元素可以使用符号variable[xx]等方式来初始化. 另外, 脚本可以使用declare -a variable语句来指定一个数组等。要引用一个数组元素(也就是取值), 可以使用大括号, 访问形式为${variable[xx]},当然了,下面是一些老男孩经常使用的方法和对数组的一点理解,如有高见,欢迎指导,先谢谢博友们了。
1.1 shell数组的常用定义方法:1)方法一:
命令法: dir=($(ls .))范例1:手工命令行操作演示
[root@oldboy scripts]# dir=($(ls .)) [root@oldboy scripts]# ls . oldboy.log apachemon.sh httpdctl[root@oldboy scripts]# echo ${#dir[*]} <==查看数组的长度
3命令行循环打印数组元素:
写法1: for ((i=0; i<`echo ${#dir[*]}`; i++)) do echo -e "${dir[$i]}\n" done 提示:i<`echo ${#dir[*]}`可以用更简单的写法i<${#dir[*]}替换,(感谢永夜兄弟)。 ==================================== 写法2: for ((i=0; i<${#dir[*]}; i++)) do echo -e "${dir[$i]}\n" done ==================================== 写法3: for((i=0;i<${#dir[@]};i++)) do echo ${dir[${i}]} done范例2:通过脚本定义及输出数组元素:
[root@oldboy scripts]# cat printarray.sh dir=($(ls .)) for ((i=0; i<${#dir[*]}; i++)) do echo -e "${dir[$i]}\n" done [root@oldboy scripts]# sh printarray.sh oldboy.logapachemon.sh
httpdctl
printarray.sh
====================================================2)方法二:列举元素法 array=(red green blue yellow magenta) array=( oldboy zhangyue zhangyang )范例3:列举元素法的脚本例子 [root@oldboy ~# cat test.sh array=( oldboy zhangyue zhangyang )for ((i=0; i< ${#array[*]}; i++))
do echo "${array[$i]}" done echo ---------------------- echo "array len:${#array[*]}" [root@oldboy ~# sh test.sh oldboy zhangyue zhangyang array len:33)方法3:其实方法三和方法一一样,因具有很好的实战价值因此单独列出讲解
judge=($(curl -I -s ${url_list[$i]}|head -1|tr "\r" "\n"))范例4:比较专业的生产检查URL地址的脚本(shell数组方法):
[root@oldboy ~]# cat check_url.sh #!/bin/bash # this script is created by oldboy. # e_mail:31333741@qq.com # qqinfo:49000448 # function:check web url # version:1.1 . /etc/init.d/functionsurl_list=(
)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<${#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@oldboy ~]# sh check_url.sh 3秒后,执行该操作.... check url... [ OK ] [ OK ] [ OK ] 提示:上述结果是带颜色的。---------------------------------------------------------
1.2 阅读博文后可以练习的小例子问题1: 把1-3 3个数字存到数组里 分别乘以8 然后依次输出。 解答: 下面的评论里已有正确答案,有兴趣的朋友可以先思考写写,然后看评论,如果有问题欢迎评论提问,如果力所能及老男孩愿意为你解答疑惑。问题2:一个SHELL脚本:oldboy.sh内容为定义一个数组array=(1 2 3) 要打印数组元素的个数。 要求:要把数组array当作变量在执行脚本时传参到脚本里使用(这块是本题的难点) 例如:这样执行 sh oldboy.sh array 解答: 下面的评论里已有正确答案,有兴趣的朋友可以先思考写写,然后看评论,如果有问题欢迎评论提问,如果力所能及老男孩愿意为你解答疑惑。更多数组的知识,大家可以参考:
转载地址:http://lzema.baihongyu.com/