对文本处理,单独用shell来处理还是比较薄弱。所以shell就引用了awk and sed这两个命令。我们今天不说这个

一 字符串
  字符串是shell编程中最常用最有用的数据类型,因为你定义一个变量,存的值就是一个字符串,字符串可以用单引号,也可以用双引号,也可以不用引号

 A=1
name="lottu"
feel='happy'

说下字符串的处理

1. 拼接字符串
echo "${name} feels ${feel}" #即空格就是字符串拼接
2. 求字符串长度
echo ${#name}
echo `expr length $name`
echo ${name} | awk '{print length($0)}' #awk里面拥有丰富的函数,所以可以完全借鉴于它。
3.截取字符串
echo ${name:1:4} #输出ottu。下标是从0开始;这跟其他语言不一样。
expr substr "$name" 1 4
echo ${name}|awk '{print substr($0,2,4)}' #输出为ottu。
4. index检索子串--返回第一次出现的位置;若找不到,则返回1
expr index "$name" lo
5. match匹配子串 --返回匹配到子串的长度;若找不到,则返回0
expr match "$name" lott #返回4
6. 替换子串${string/substring/replacement}表示仅替换一次substring相配字符,而${string//substring/replacement}表示为替换所有的substring相配的子串
str="you and me,go your home.OK? you"
echo ${str/you/tom}
echo ${str//you/tom}

总结:灵活运用命令expr,以上实现效果都可以用awk来实现。本人对awk很熟悉;大家有什么文本处理的问题,可以找我。


二 数组

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

1. 定义数组
在Shell中,用括号来表示数组,数组元素用“空格”符号分割开。定义数组的一般形式为:
    array_name=(value1 ... valuen)
vname=("lottu" "li0924" "0924" "tom") 2. 打印数组值
echo ${vname[2]} #输出"0924" ;大家理解?因为shell数组的下标是从0开始。
使用使用@ 或 * 可以获取数组中的所有元素
echo ${vname[@]} or echo ${vname[*]} 3.获取数组长度
其实跟字符串长度差不多
echo ${#vname[*]} #输出为4;数组的个数
求数组某个下标的值的长度
echo ${#vname[1]} #输出为6 4. 删除数组
unset命令
unset varray_name[n] :删除第n+1个
unset varray_name 删除数组 varray_name 5. 获取部分数组--格式:${数组名[@或*]:起始位置:长度}
$ vname=("lottu" "li0924" "0924" "tom")
$ echo ${vname[*]:0:2}
lottu li0924 6. 扩展read 命令来定义数组使用参数a
$ read -p "please input your number: " -a num
please input your number: 1 5 6 8
$ echo ${num[*]}
1 5 6 8

shell基础(六)--字符串和数组的更多相关文章

  1. shell变量,字符串,数组

    一.shell变量定义: 命名只能使用英文字母,数字和下划线,首个字符不能以数字开头: 中间不能有空格,可以使用下划线: 不能使用标点符号: 不能使用bash里的关键字. 变量使用: 使用一个定义过的 ...

  2. Shell基础(六):使用awk提取文本、awk处理条件、awk综合脚本应用、awk流程控制、awk扩展应用

    一.使用awk提取文本 目标: 本案例要求使用awk工具完成下列过滤任务: 1> 练习awk工具的基本用法    2> 提取本机的IP地址.根分区使用率    3> 格式化输出/et ...

  3. 【Shell基础】字符串删除

    案例:将金额18.中的点去掉,结果为18 #!/bin/shold_value=. new_value=`echo ${old_value%%.*}` echo $new_value ${filena ...

  4. 1.7 js基础,字符串、数组小结

    一.arguments  实参参数的数组         实参[实际的值],形参[形式上的参数]         当参数个数不固定的时候使用.         示例: script> var g ...

  5. 【shell脚本】字符串和数组的使用

    字符串 可以使用单引号和双引号定义字符串变量但是单引号中不支持变量解析 #! /bin/bashusername="mayuan" str_1="hello ${user ...

  6. shell基础(转)

    shell基础1:文件安全与权限 http://bbs.chinaunix.net/forum/viewtopic.php?t=434579&highlight=wingger 附:Linux ...

  7. shell切分字符串到数组

    shell切分字符串到数组 问题: 对于’aa,bb,cc,dd,ee’这样的字符串输出采用,分隔开的aa bb cc dd ee aa:bb is ok:/home/work按照":&qu ...

  8. 程序设计入门-C语言基础知识-翁恺-第六周:数组-详细笔记(六)

    目录 第六章:数组 6-1 数组 6-2 数组计算 6.3 课后习题 第六章:数组 6-1 数组 题目:让用户输入一组整数以-1结束输入,算出这组数的平均值,并且输出大于平均值的数. 我们需要记录用户 ...

  9. shell基础知识之数组

    数组允许脚本利用索引将数据集合保存为独立的条目.Bash支持普通数组和关联数组,前者 使用整数作为数组索引,后者使用字符串作为数组索引.当数据以数字顺序组织的时候,应该使 用普通数组,例如一组连续的迭 ...

  10. ajax处理返回的三种格式(json格式 , xml通用格式 , html文本格式)(数据类型:整数、字符串、数组、对象)(基础最重要!)

    ajax方法的参数 常用的ajax参数比如url,data,type,包括预期返回类型dataType,发送到服务器的数据的编码类型contentType,成功方法,失败方法,完成方法.除了这些以外还 ...

随机推荐

  1. JDK Logger 简介 (zhuan)

    http://antlove.iteye.com/blog/1924832 ******************************************* 一 简述 java.util.log ...

  2. uboot在nandflash存储时内存和NandFlash存储空间

    硬件采用nandflash,nandflash为8位数据宽度,没有dataflash和norflash. Nandflash空间分配为 bootstrap + u-boot + env + linux ...

  3. u-boot中网口处理--硬件部分

    1.  网口硬件方案: AT91SAM9G10 + DM9000CEP: DM9000CEP为MAC+PHY解决方案,与MCU链接通过8位或16位数据总线. 内部SRAM为16Kbyte. 2. DM ...

  4. Nginx实战系列之功能篇----后端节点健康检查(转)

    公司前一段对业务线上的nginx做了整理,重点就是对nginx上负载均衡器的后端节点做健康检查.目前,nginx对后端节点健康检查的方式主要有3种,这里列出:   1.ngx_http_proxy_m ...

  5. 查询一个字符串的子串出现的次数在sql中

    select name,char_length(name)-char_length(replace(name,'aaaaaa','')) from teacher; 将原来的字符串字段取出长度  将子 ...

  6. Java-DBCP连接池

    创建项目: 导入jar包: 参见上图. JDBCConn.java获取数据源类: package com.gordon.jdbcconn; import java.io.InputStream; im ...

  7. MongoDB Shell 了解使用

    配置环境变量 WIN10系统:右键单击"此电脑"--属性--高级系统设置--高级--环境变量,添加C:\Program Files\MongoDB\Server\3.0\bin 如 ...

  8. Sphinx速成指南

    目录 1. Sphinx简介 1.1. 什么是全文检索 1.2. 介绍 1.3. Sphinx的特性 2. Sphinx安装(For MySQL) 2.1. Windows下安装 2.2. Linux ...

  9. 数据导入报错 Got a packet bigger than‘max_allowed_packet’bytes

    数据导入报错:Got a packet bigger than‘max_allowed_packet’bytes的问题 2个解决方法: 1.临时修改:mysql>set global max_a ...

  10. W/MessageQueue: Handler (android.os.Handler) {4241f8f8} sending message to a Handler on a dead thread

    缩略信息是: sending message to a Handler on a dead thread 我是用IntentService时报的 稍微纤细一点儿的信息是: Handler (andro ...