linux shell数组深入学习理解

bash shell只支持一维数组,但参数个数没有限制。

声明一个数组:
declare -a array
(其实不用声明,按数组方式直接赋值给变量即可,BASH就知道那是数组)

数组赋值:
(1) array=(var1 var2 var3 ... varN)
(2) array=([0]=var1 [1]=var2 [2]=var3 ... [n]=varN)
(3) array[0]=var1
    arrya[1]=var2
    ...
    array[n]=varN

计算数组元素个数:
${#array[@]}  或者  ${#array[*]}

BASH的特殊参数 @ 和 * 都表示“扩展位置参数,从1开始”,但形式稍有差异,但在数组里使用好像是可以通用的。

引用数组:


代码如下:

echo ${array[n]}

遍历数组:


代码如下:

filename=(`ls`)
for var in ${filename[@]};do
echo $var
done

下面为大家介绍一些shell数组的小例子。

1、从“标准输入”读入n次字符串,每次输入的字符串保存在数组array里


代码如下:

#!/bin/bash
i=0
n=5
while [ "$i" -lt $n ] ; do
  echo "Please input strings ... `expr $i + 1`"
  read array[$i]
  b=${array[$i]}
  echo "$b"
  i=`expr $i + 1`
done

2、将字符串里的字母逐个放入数组,并输出到“标准输出”


代码如下:

#!/bin/bash
chars='abcdefghijklmnopqrstuvwxyz'
for (( i=0; i<26; i++ )) ; do
    array[$i]=${chars:$i:1}
    echo ${array[$i]}
done

这里有趣的地方是 ${chars:$i:1},表示从chars字符串的 $i 位置开始,获取 1 个字符。如果将 1 改为 3 ,就获取 3 个字符啦~ 结果是:
abc
bcd
...
vxy
xyz
yz     //没有足够字符串获取了
z      //没有足够字符串获取了

下面介绍将数组应用到shell环境变量的一些例子。

3、将数组应用到shell环境变量(1)


代码如下:

数组赋值:
[root@pps ~]# SEASON=("Srping" "Summer" "Autumn" "Winter")
当你发现赋值错了,也可以立刻从新赋值纠正,如上面的 Spring 被写成 Srping。
重新赋值:(原来的值被重写)
[root@pps ~]# SEASON=("Spring" "Summer" "Autumn" "Winter")

查看一下环境变量:
[root@pps ~]# set | grep SEASON
SEASON=([0]="Spring" [1]="Summer" [2]="Autumn" [3]="Winter")

显示整个数组:
[root@pps ~]# echo ${SEASON[*]}  或者 echo ${SEASON[@]}
Spring Summer Autumn Winter

显示某一数组元素:
[root@pps ~]# echo ${SEASON[3]}
Winter

给单个数组元素赋值:
[root@pps ~]# SEASON[0]="New_Spring"

再查看一下看数组:
[root@pps ~]# echo ${SEASON[*]}
New_Spring Summer Autumn Winter

清除指定的单个数组元素:
[root@pps ~]# unset SEASON[2]

清除整个数组:
[root@pps ~]# unset SEASON

4、将数组应用到shell环境变量(2)
使用tr命令将文件中的回车转换成空格:


代码如下:

[root@pps ~]# cat /etc/shells | tr "\n" " " > /tmp/tmp.file

将文件中内容给数组赋值:(碰到第一个回车符之前的内容)


代码如下:

[root@pps ~]# read -a SHELLS < /tmp/tmp.file

查看数组赋值情况:


代码如下:

[root@pps ~]# set | grep "SHELLS"
SHELLS=([0]="/bin/sh" [1]="/bin/bash" [2]="/sbin/nologin" [3]="/bin/tcsh" [4]="/bin/csh" [5]="/bin/ksh")

后面可以将这个数组环境变量应用到其它的SHELL脚本或者应用程序里了。

总结:有了以上的这些内容,以后在shell编程中,对数组这块来讲,应该不成什么问题了,你做到了吗?!

(0)

相关推荐

  • linux Apache CGI 安装配置

    本文假定你已经安装好linux(本文的linux版本为Fedora Core3), 并具有root权限. 1,安装apache 首先到apache的主页下载最新版本的apache http server,地址为 http://httpd.apache.org/ 本文写于2006.4.29,apache版本为2.2.0 .如果你也想用这一个版本的话请点击:http://mirror.vmmatrix.net/apache/httpd/httpd-2.2.0.tar.gz 安装apache: 切换到

  • Python执行Linux系统命令的4种方法

    (1) os.system 仅仅在一个子终端运行系统命令,而不能获取命令执行后的返回信息 复制代码 代码如下: system(command) -> exit_status Execute the command (a string) in a subshell. 如果再命令行下执行,结果直接打印出来 复制代码 代码如下: >>> os.system('ls') 04101419778.CHM   bash      document    media      py-django

  • Linux ls命令参数详解

    -a -- 全部(all).列举目录中的全部文件,包括隐藏文件(.filename).位于这个列表的起首处的 .. 和 . 依次是指父目录和你的当前目录.      -l -- 长(long).列举目录内容的细节,包括权限(模式).所有者.组群.大小.创建日期.文件是否是到系统其它地方的链接,以及链接的指向.      -F -- 文件类型(File type).在每一个列举项目之后添加一个符号.这些符号包括:/ 表明是一个目录:@ 表明是到其它文件的符号链接:* 表明是一个可执行文件.    

  • Linux系统下如何查看及修改文件读写权限

    查看文件权限的语句: 在终端输入: ls -l xxx.xxx (xxx.xxx是文件名) 那么就会出现相类似的信息,主要都是这些: -rw-rw-r-- 一共有10位数 其中: 最前面那个 - 代表的是类型 中间那三个 rw- 代表的是所有者(user) 然后那三个 rw- 代表的是组群(group) 最后那三个 r-- 代表的是其他人(other) 然后我再解释一下后面那9位数: r 表示文件可以被读(read) w 表示文件可以被写(write) x 表示文件可以被执行(如果它是程序的话)

  • Linux下为PHP添加扩展库的方法

    加上会出什么问题,不加会报什么错:所以在编译PHP的时候除了必要的目录指定,好多参数都没有加--等我在安装web程序的时候,才发现,很多参数是要加上的,但是我lnmp已经搭建好了,也不想重新编译,重新安装..于是就在网上找到了此文 一.添加FTP扩展 1.找到原来的源码包解压一下如:php-5.2.13进入到到FTP的扩展目录/root/lnmp/php-5.3.0/ext/ftp 2.调用phpize程序生成编译配置文件 复制代码 代码如下: root@dns ftp]# /usr/local

  • Linux 详解 /var/log/xferlog的各个字段解析

    Linux 详解 /var/log/xferlog的各个字段解析 /var/log/xferlog的各个字段解析 Thu Dec 1 17:40:46 2016 8 10.11.40.147 32035942 /home/chb/1.txt b _ o r dxpanalysis ftp 0 * c 字段 含义 Thu Dec 1 17:40:46 2016 日期和时间 8 下载文件所花费的秒数 10.11.40.147 远程系统 320359 文件大小 /home/chb/1.txt 本地路径

  • Linux下MySQL安装配置 MySQL配置参数详解

    一.下载编译安装 #cd /usr/local/src/ #wget http://mysql.byungsoo.net/Downloads/MySQL-5.1/mysql-5.1.38.tar.gz #tar –xzvf mysql-5.1.38.tar.gz ../software/ #./configure --prefix=/usr/local/mysql //MySQL安装目录 --datadir=/mydata //数据库存放目录 --with-charset=utf8 //使用UT

  • linux shell脚本学习xargs命令使用详解

    xargs是给命令传递参数的一个过滤器,也是组合多个命令的一个工具.它把一个数据流分割为一些足够小的块,以方便过滤器和命令进行处理.通常情况下,xargs从管道或者stdin中读取数据,但是它也能够从文件的输出中读取数据.xargs的默认命令是echo,这意味着通过管道传递给xargs的输入将会包含换行和空白,不过通过xargs的处理,换行和空白将被空格取代. xargs 是一个强有力的命令,它能够捕获一个命令的输出,然后传递给另外一个命令,下面是一些如何有效使用xargs 的实用例子. 1.

  • linux shell数组深入学习理解

    bash shell只支持一维数组,但参数个数没有限制. 声明一个数组:declare -a array(其实不用声明,按数组方式直接赋值给变量即可,BASH就知道那是数组) 数组赋值:(1) array=(var1 var2 var3 ... varN)(2) array=([0]=var1 [1]=var2 [2]=var3 ... [n]=varN)(3) array[0]=var1    arrya[1]=var2    ...    array[n]=varN 计算数组元素个数:${#

  • Linux shell数组循环的实例详解

    shell数组循环 测试shell数组,循环的例子: arr=("a" "b" "c") echo "所有的内容如下:"${arr[@]} echo "数组的长度:"${#arr[*]} for var in ${arr[@]} do echo "打印的内容:"$var done 输出的内容如下: 以上就是Linux shell数组循环的实例详解,如有疑问请留言或者到本站社区交流讨论,感

  • Linux shell脚本基础学习详细介绍(完整版)第1/2页

    Linux shell脚本基础学习这里我们先来第一讲,介绍shell的语法基础,开头.注释.变量和 环境变量,向大家做一个基础的介绍,虽然不涉及具体东西,但是打好基础是以后学习轻松地前提. 1. Linux 脚本编写基础 ◆1.1 语法基本介绍1.1.1 开头程序必须以下面的行开始(必须方在文件的第一行):#!/bin/sh符号#!用来告诉系统它后面的参数是用来执行该文件的程序.在这个例子中我们使用/bin/sh来执行程序.当编辑好脚本时,如果要执行该脚本,还必须使其可执行.要使脚本可执行:编译

  • Linux Shell 数组建立及使用技巧

    linux shell在编程方面比windows 批处理强大太多,无论是在循环.运算.已经数据类型方面都是不能比较的. 下面是个人在使用时候,对它在数组方面一些操作进行的总结. 1.数组定义 [chengmo@centos5 ~]$ a=(1 2 3 4 5) [chengmo@centos5 ~]$ echo $a 一对括号表示是数组,数组元素用"空格"符号分割开. 2.数组读取与赋值 得到长度: [chengmo@centos5 ~]$ echo ${ #a[@]} 用${#数组名

  • 通过实例深入理解linux shell数组

    本文为大家介绍linxu shell中数组的相关知识,并举了很多例子供参考,包括数组的复制,计算,删除,替换等,是学习shell 数组的不可多得的好文章. 数组的声明: 1)array[key]=value # array[0]=one,array[1]=two2)declare -a array # array被当作数组名3)array=( value1 value2 value3 ... )4)array=( [1]=one [2]=two [3]=three ... )5)array="o

  • Linux Shell 数组的创建及使用技巧

    linux shell在编程方面比windows 批处理强大太多,无论是在循环.运算.已经数据类型方面都是不能比较的. 下面是个人在使用时候,对它在数组方面一些操作进行的总结. 1.数组定义 [chengmo@centos5 ~]$ a=(1 2 3 4 5) [chengmo@centos5 ~]$ echo $a 一对括号表示是数组,数组元素用"空格"符号分割开. 2.数组读取与赋值 得到长度: [chengmo@centos5 ~]$ echo ${#a[@]} 5 用${#数组

  • Linux shell数组与关联数组的用法实例

    1. 关联数组 使用 declare -A(declare 的用法请使用 help 进行查看,help declare) 进行声明关联数组变量: $ declare -A fruits_price $ fruits_price=([apple]='$100' [orange]='$150') 列出关联数组的索引(也就是 key): $ echo ${!fruits_price[*]} $ echo ${!fruits_price[@]} 2. 序列数组 seq 方法创建 基本用法: $ a_nu

  • Linux shell脚本全面学习入门

    1. Linux 脚本编写基础 1.1 语法基本介绍 1.1.1 开头 程序必须以下面的行开始(必须方在文件的第一行): #!/bin/sh 符号#!用来告诉系统它后面的参数是用来执行该文件的程序.在这个例子中我们使用/bin/sh来执行程序. 当编辑好脚本时,如果要执行该脚本,还必须使其可执行. 要使脚本可执行: 编译 chmod +x filename 这样才能用./filename 来运行 1.1.2 注释 在进行shell编程时,以#开头的句子表示注释,直到这一行的结束.我们真诚地建议您

  • linux shell 中数组的定义和for循环遍历的方法

    linux shell中的语法和普通编程语言 c/c++ java 的不太一样,平时用的不多,所以总是记不住,写脚本才会去查怎么用. 今天突然被问到数组怎么去遍历.平时写shell脚本也经常遍历数组,但是一下没答上来,被鄙视了. 所以平时学习还是好好总结吧,不能每次都问度娘谷爷.IT 知识体系较为庞大,细节的东西也太多,平时遇到问题应该的多总结记笔记. linux 中定义一个数据的语法为: variable=(arg1 arg2 arg3 ....) 中间用空格分开.数组的下标从0开始. 1 获

  • Linux Shell 生成随机数和随机字符串的方法示例

    日常生活中,会经常用到随机数,使用场景非常广泛,例如买彩票.丢骰子.抽签.年会抽奖等. Shell 下如何生成随机数呢,米扑博客特意写了本文,总结 Linux Shell 产生随机数的多种方法. 计算机产生的的只是"伪随机数",不会产生绝对的随机数(是一种理想随机数).实际上,伪随机数和理想随机数也是相对的概念,例如伪随机数在1万万亿亿亿年内也无法重复,算是理想随机数么? 伪随机数在大量重现时也并不一定保持唯一,但一个好的伪随机产生算法将可以产生一个非常长的不重复的序列,例如 UUID

随机推荐