1.Shell脚本数组操作小结

http://www.jb51.net/article/52382.htm

Linux Shell在编程方面比Windows批处理强大很多,无论是在循环、运算。

bash支持一维数组(不支持多维数组),并且没有限定数组的大小。类似与C语言,数组元素的下标由0开始编号。获取数组中的元素要利用下标,下标可以是整数或算术表达式,其值应大于或等于0。

定义数组

在Shell中,用括号来表示数组,数组元素用“空格”符号分割开。定义数组的一般形式为:

复制代码 代码如下:
数组名=(值1 值2 ... 值n)

例如:

复制代码
代码如下:
array_name=(value0 value1 value2
value3)
 

或者

复制代码
代码如下:
array_name=(
value0
value1
value2
value3
)

还可以单独定义数组的各个分量:

复制代码
代码如下:
array_name[0]=value0
array_name[1]=value1
array_name[n]=valuen

可以不使用连续的下标,而且下标的范围没有限制。

读取数组

读取数组元素值的一般格式是:

复制代码
代码如下:
${数组名[下标]}

例如:

复制代码
代码如下:
valuen=${array_name[n]}

使用@符号可以获取数组中的所有元素,例如:

复制代码
代码如下:
echo ${array_name[@]}

获取数组的长度

获取数组长度的方法与获取字符串长度的方法相同,例如:

复制代码
代码如下:
#
取得数组元素的个数
length=${#array_name[@]}
# 或者
length=${#array_name[*]}
#
取得数组单个元素的长度
lengthn=${#array_name[n]}

附:shell数组小结

不知道
是什么时候写的东西,整理文档时被考古发现,给那些闲着蛋疼之人,一笑而过吧。如果本文中的错误给您带来所有的精神损失,请找保险公司理陪!当然你可以告诉我
(倾诉)

数组作为一种特殊的数据结构在任何一种编程语言中都有它的一席之地,当然bash
shell也不例外。本文就shell数组来做一个小的总结。
在这里只讨论一维数组的情况,关于多维数组(事实上,你得用一维数组的方法来模拟),不涉及。这里包括数组的复制,计算,删除,替换。

数组的声明:

复制代码
代码如下:
array[key]=value # array[0]=one,array[1]=two

declare -a array # array被当作数组名

array=( value1 value2 value3 ... )

array=( [1]=one [2]=two [3]=three ... )

array="one two three" # echo
${array[0|@|*]},把array变量当作数组来处理,但数组元素只有字符串本身

数组的访问:

复制代码
代码如下:
${array[key]} # ${array[1]}

数组的删除

复制代码
代码如下:
unset array[1] # 删除数组中第一个元素

unset array # 删除整个数组

计算数组的长度:

复制代码
代码如下:
${#array}

${#array[0]} #同上。 ${#array[*]} 、${#array[@]}。注意同#{array:0}的区别

数组的提取

从尾部开始提取:

复制代码
代码如下:
array=( [0]=one [1]=two [2]=three [3]=four
)
${array[@]:1} # two three
four,除掉第一个元素后所有元素,那么${array[@]:0}表示所有元素
${array[@]:0:2} # one
two
${array[@]:1:2} # two three

子串删除

复制代码
代码如下:
[root@localhost dev]# echo
${array[@]:0}
one two three four

[root@localhost dev]# echo ${array[@]#t*e} #
左边开始最短的匹配:"t*e",这将匹配到"thre"
one two e four

[root@localhost dev]# echo ${array[@]##t*e} # 左边开始最长的匹配,这将匹配到"three"

[root@localhost dev]# array=( [0]=one [1]=two [2]=three [3]=four )

[root@localhost dev]# echo ${array[@] %o} # 从字符串的结尾开始最短的匹配
one tw three
four

[root@localhost dev]# echo ${array[@] %%o} # 从字符串的结尾开始最长的匹配
one tw three
four

子串替换

复制代码
代码如下:
[root@localhost dev]# array=( [0]=one [1]=two
[2]=three [3]=four )

第一个匹配到的,会被删除

复制代码
代码如下:
[root@localhost dev]# echo ${array[@]
/o/m}
mne twm three fmur

所有匹配到的,都会被删除

复制代码
代码如下:
[root@localhost dev]# echo ${array[@]
//o/m}
mne twm three fmur

没有指定替换子串,则删除匹配到的子符

复制代码
代码如下:
[root@localhost dev]# echo ${array[@]
//o/}
ne tw three fur

替换字符串前端子串

复制代码
代码如下:
[root@localhost dev]# echo ${array[@]
/#o/k}
kne two three four

替换字符串后端子串

复制代码
代码如下:
[root@localhost dev]# echo ${array[@]
/%o/k}
one twk three four
 
 

2.shell中for循环总结

1、 for((i=1;i<=10;i++));do echo $(expr $i \* 4);done

2、在shell中常用的是 for i in $(seq 10)

3、for i in `ls`

几个不同的方法来实现输出1-100间可以被3整除的数

1.用(())

#!/bin/bash

clear for((i=1;i<100;i++))

for do if((i%3==0))

then

echo $i

continue

fi

done

Linux下循环、选择、顺序操作的更多相关文章

  1. Linux下如何选择文件系统:EXT4、Btrfs 和 XFS

    老实说,人们最不曾思考的问题之一是他们的个人电脑中使用了什么文件系统.Windows 和 Mac OS X 用户更没有理由去考虑,因为对于他们的操作系统,只有一种选择,那就是 NTFS 和 HFS+. ...

  2. Linux下idea选择tomcat server 报错Warning the selected directory is not a valid tomcat home

    这是文件的权限问题,在tomcat的目录下执行以下代码 sudo chmod 777 -R tomcat8/ 然后再去idea中配置即可

  3. linux下的FTP安装及调优

    前言: 在之前交换平台的开发中,FTP的各种操作算是核心功能点. 在FTP的开发中,遇到了不少坑. 如FTP需要设置被动模式,否则10M以上的包可能会上传失败. 如FTP需要设置囚牢模式,否则访问的文 ...

  4. 关于linux下的嵌入式文件系统以及flash文件系统选择

    嵌入式linux下常见的文件系统 • RomFS:只读文件系统,可以放在ROM空间,也 可以在系统的RAM中,嵌入式linux中常用来作 根文件系统 • RamFS:利用VFS自身结构而形成的内存文件 ...

  5. gcc和MinGW的异同(在cygwin/gcc做的东西可以无缝的用在linux下,没有任何问题,是在windows下开发linux程序的一个很好的选择)

    cygwin/gcc和MinGW都是gcc在windows下的编译环境,但是它们有什么区别,在实际工作中如何选择这两种编译器. cygwin/gcc完全可以和在linux下的gcc化做等号,这个可以从 ...

  6. Linux下的几个好用的命令与参数

    将所有文件的编码,转换为UTF-8 find . ! -type d -exec enca -L zh_CN -x UTF-8 {} \; 将指定目录下所有文件权限设定为644 find . ! -t ...

  7. Linux下四款Web服务器压力测试工具(http_load、webbench、ab、siege)介绍

    一.http_load程序非常小,解压后也不到100Khttp_load以并行复用的方式运行,用以测试web服务器的吞吐量与负载.但是它不同于大多数压力测试工具,它可以以一个单一的进程运行,一般不会把 ...

  8. Linux下调试程序方法

    您可以用各种方法来监控运行着的用户空间程序:可以为其运行调试器并单步调试该程序,添加打印语句,或者添加工具来分析程序.本文描述了几种可以用来调试在 Linux 上运行的程序的方法.我们将回顾四种调试问 ...

  9. Linux下6种优秀的邮件传输代理

    导读 在互联网上,邮件客户端向邮件服务器发送邮件然后将消息路由到正确的目的地(其他客户),其中邮件服务器使用的一个网络应用程序称为邮件传输代理(MTA). 最好的Linux邮件传输代理(MTAs) 邮 ...

随机推荐

  1. android 自定义控件 使用declare-styleable进行配置属性(源码角度)

          android自定义styleableattrs源码 最近在模仿今日头条,发现它的很多属性都是通过自定义控件并设定相关的配置属性进行配置,于是便查询了解了下declare-styleabl ...

  2. iOS 开发之内购 – AppStore

    前言本文会给大家详细介绍iOS内购,虽然之前网上也有内购的教程,但是还不够详细,我重新整理出一份教程,希望对大家有所帮助.    基于Xcode7.1.1版本,模拟器iphone6,9.1系统.    ...

  3. Servlet------(声明式)异常处理

    Test.java 其他方法不变,重写 protected void service()方法 public void init(ServletConfig config) throws Servlet ...

  4. MyEclipse------从MySQL取出图片

    showImage.jsp <%@ page language="java" import="java.util.*" pageEncoding=&quo ...

  5. C++ map 映照容器

    map映照容器的元素数据是一个键值和一个映照数据组成的,键值与映照数据之间具有一一映照的关系. map映照容器的数据结构是采用红黑树来实现的,插入键值的元素不允许重复,比较函数只对元素的键值进行比较, ...

  6. 复制本贴地址传给QQ/MSN好友的代码

    <input name="" onclick='copyToClipBoard()' type="button" value=" 复制本贴地址, ...

  7. ASP.NET版Memcached监控工具(转载)

    在上一篇文章<使用Memcached提高.NET应用程序的性能>中周公讲述如何在.NET中使用Memcached来提高.NET应用程序的性 能.在实际的使用中有可能出现Memcached因 ...

  8. C# 反射创建对象,包括创建引用外部程序集类的实例

    #region 根据对象名成创建对象 /// <summary> /// 根据对象名成创建对象 /// </summary> /// <param name=" ...

  9. EL表达式从request和session中取值

    在Action中保存登录的基本信息:request.getSession().setAttribute("adminid", str); 在JSP页面中:${sessionScop ...

  10. 如何有效的保护 JAVA 程序

    从头到尾保护 JAVA 目前关于 JAVA 程序的加密方式不外乎 JAVA 模糊处理(Obfuscator)和运用 ClassLoader 方法进行加密处理这两种方式(其他的方式亦有,但大多是这两种的 ...