数组

声明数组

declare -a ARRAY_NAME

declare -A ARRAY_NAME: 关联数组

注意:两者不可相互转换

数组名和下标(索引)

索引:编号从0开始,属于数值索引

注意:索引可支持使用自定义的格式,而不仅是数值格式,即为关联索引, bash4.0版本之后开始支持

bash的数组支持稀疏格式(索引不连续)

数组赋值

(1) 一次只赋值一个元素

ARRAY_NAME[INDEX]=VALUE  weekdays[0]="Sunday"  weekdays[4]="Thursday"

(2) 一次赋值全部元素

ARRAY_NAME=("VAL1" "VAL2" "VAL3" ...)

 filename=(`ls /root/*.sh`)

 echo ${filename[@]}
/root/99.sh /root/a.sh /root/b.sh /root/caluid.sh /root/creat10user.sh /root/diskcheck.sh /root/g1.sh /root/getuserinfo.sh /root/guess.sh /root/selectmenu.sh /root/shift.sh /root/testfor.sh /root/trap.sh /root/whiledf.sh

(3) 只赋值特定元素

ARRAY_NAME=([0]="VAL1" [3]="VAL2" ...)

(4) 交互式数组值对赋值   read -a ARRAY

引用数组

${ARRAY_NAME[INDEX]}  注意:省略[INDEX]表示引用下标为0的元素

引用数组所有元素:

${ARRAY_NAME[*]}          ${ARRAY_NAME[@]}

数组的长度(数组中元素的个数):

${#ARRAY_NAME[*]}         ${#ARRAY_NAME[@]}

删除数组中的某元素:    导致稀疏格式 unset ARRAY[INDEX]

删除整个数组: unset ARRAY

数组切片

引用数组中的元素:

数组切片:${ARRAY[@]:offset:number}

offset: 要跳过的元素个数

number: 要取出的元素个数   取偏移量之后的所有元素      ${ARRAY[@]:offset}

向数组中追加元素:  ARRAY[${#ARRAY[*]}]=value

字符串

字符串切片的示例

 [root@centos7 ~]# str=`echo {a..z}|tr -d " "`
[root@centos7 ~]# echo $str
abcdefghijklmnopqrstuvwxyz
[root@centos7 ~]# str2=`echo {a..z}`
[root@centos7 ~]# echo $str2
a b c d e f g h i j k l m n o p q r s t u v w x y z
[root@centos7 ~]# echo ${#str} [root@centos7 ~]# echo ${#str2} [root@centos7 ~]# echo ${str:}
defghijklmnopqrstuvwxyz
[root@centos7 ~]# echo ${str::}
defg
[root@centos7 ~]# echo ${str: -}
wxyz
[root@centos7 ~]# echo ${str: -:-}
wx
[root@centos7 ~]# echo ${str: -:}
w
[root@centos7 ~]# echo ${str: -:}
wxy

字符串模式取子字符串

 [root@centos7 ~]# line=`head -n1 /etc/passwd`
[root@centos7 ~]# echo $line
root:x:::root:/root:/bin/bash
[root@centos7 ~]# echo ${line#*:}
x:::root:/root:/bin/bash
[root@centos7 ~]# echo ${line##*:}
/bin/bash
[root@centos7 ~]# echo ${line%*:}
root:x:::root:/root:/bin/bash
[root@centos7 ~]# echo ${line%:*}
root:x:::root:/root
[root@centos7 ~]# echo ${line%%:*}
root
[root@centos7 ~]# disk="/dev/sda3 30G 82M 30G 1% /data"
[root@centos7 ~]# echo $disk
/dev/sda3 30G 82M 30G % /data
[root@centos7 ~]# echo ${disk%% *}
/dev/sda3
[root@centos7 ~]#

字符串的搜索替代

${var/pattern/substr}:查找var所表示的字符串中,第一次被pattern所匹 配到的字符串,以substr替换之

${var//pattern/substr}: 查找var所表示的字符串中,所有能被pattern所匹 配到的字符串,以substr替换之

${var/#pattern/substr}:查找var所表示的字符串中,行首被pattern所匹 配到的字符串,以substr替换之

${var/%pattern/substr}:查找var所表示的字符串中,行尾被pattern所匹 配到的字符串,以substr替换之

字符串的搜索删除

${var/pattern}:删除var所表示的字符串中第一次被pattern所匹配到的字符串

${var//pattern}:删除var所表示的字符串中所有被pattern所匹配到的字符串

${var/#pattern}:删除var所表示的字符串中所有以pattern为行首所匹配到的字符串

${var/%pattern}:删除var所表示的字符串中所有以pattern为行尾所匹配到的字符串

字符大小写转换

${var^^}:把var中的所有小写字母转换为大写

${var,,}:把var中的所有大写字母转换为小写

eval命令

eval    首先会扫描替换命令中的所有变量,然后再去执行替换后的命令

eval  命令将会首先扫描命令行进行所有的置换,然后再执行该命令.该命令适用于那些一次扫描无法实现其功能的变量.该命令对变量进行两次扫描

 [root@centos7 ~]# n=
[root@centos7 ~]# echo {..$n}
{..}
[root@centos7 ~]# eval echo {..$n} [root@centos7 ~]# CMD=whoami
[root@centos7 ~]# echo $CMD
whoami
[root@centos7 ~]# eval $CMD
root
[root@centos7 ~]#

变量赋值方式

shell字符串数组的更多相关文章

  1. 【Linux】shell字符串分割、数组访问、条件判断

    参考资料: shell字符串分割再循环:http://www.shangxueba.com/jingyan/1633455.html linux shell中 if else以及大于.小于.等于逻辑表 ...

  2. Linux shell之数组

    引言 在Linux平台上工作,我们经常需要使用shell来编写一些有用.有意义的脚本程序.有时,会经常使用shell数组.那么,shell中的数组是怎么表现的呢,又是怎么定义的呢?接下来逐一的进行讲解 ...

  3. shell 字符串处理汇总(查找,替换等等)

    字符串: 简称“串”.有限字符的序列.数据元素为字符的线性表,是一种数据的逻辑结构.在计算机中可有不同的存储结构.在串上可进行求子串.插入字符.删除字符.置换字符等运算. 字符: 计算机程序设计及操作 ...

  4. linux shell 中数组使用方法介绍

    linux shell在编程方面比windows 批处理强大太多,不管是在循环.运算.已经数据类型方面都是不能比較的. 以下是个人在使用时候,对它在数组方面一些操作进行的总结. 1.数组定义 [che ...

  5. shell-变量,字符串,数组,注释,参数传递

    Linux的Shell有很多种,常见的有Bourne Shell Bourne Again Shell C Shell K Shell Shell for Root 等,其中Bourne Again ...

  6. 我们一起来学Shell - shell的数组

    文章目录 什么是数组 数组中常用变量 数组的定义 小括号定义数组变量 小括号加键值对定义数组变量 分别定义数组变量 动态地定义数组变量 数组赋值的切片 遍历数组 关联数组 我们一起来学Shell - ...

  7. java求字符串数组交集、并集和差集

    import java.util.HashMap; import java.util.HashSet; import java.util.LinkedList; import java.util.Ma ...

  8. Javascript-常用字符串数组操作

    字符串的操作在编写Js的过程中是不可避免的 因为它太多的API 还有相似的API让我们很头痛 为了避免以后遇到模拟两可的问题 还是做个笔记比较好 把常用的字符串操作记录下来成笔记 方便以后查找 No1 ...

  9. Matlab 之 字符串数组查找

    Matlab的优势在于向量操作,字符串操作往往费时费力,但是如果能充分利用Matlab自带的一些函数,也可以取得不错的效果.下面就介绍一下字符串数组查找的小技巧. 字符串数组我通常会选择应用cell格 ...

随机推荐

  1. golang 爬虫

    go语言,goquery,colly,chromedp,webloop等 https://www.cnblogs.com/majianguo/p/8186429.html

  2. 中文数据解码报错 UnicodeDecodeError: 'gbk' codec can't decode bytes in position 2-3: illegal multibyte sequence

    UnicodeDecodeError: 'gbk' codec can't decode bytes in position 2-3: illegal multibyte sequence 失败原因: ...

  3. WebApi中的Session与Token间的处理对接

    首先,说起来创建session,一般会针对注册登录或者授权等情况: session 从字面上讲,就是会话.这个就类似于你和一个人交谈,你怎么知道当前和你交谈的是张三而不是李四呢?对方肯定有某种特征(长 ...

  4. 关于删除 hao123 主页设置的一点经验

    :first-child { margin-top: 0px; } blockquote>:last-child { margin-bottom: 0px; } --> 说一说关于删除 h ...

  5. 9.24 Django Form组件

    2018-9-23 20:10:04 这两天优化了自己图书管理系统 github 连接:https://github.com/TrueNewBee/pythonDemo 顺便整理了博客,写了好多总结, ...

  6. fclose函数无响应

    现象:win32程序在退出时无响应,当一步步跟踪代码时走到fclose. 原因:打开文件在一个线程中,写文件时在另一个线程,在open和write文件时均正常,只有在fclose时出现无响应. 解决: ...

  7. C# MVC+EF—页面搭建

    上一篇文章搭建了基本结构,现在来搭建页面 一.新建控制器 Controllers=>添加=>控制器=>MVC 5控制器=>命名为DepartmentController pub ...

  8. JavaScript----特效代码

    1.不同时间段显示不同问候语 <Script Language="JavaScript"> <!-- var text=""; day = n ...

  9. TOP100summit:【分享实录-美团点评】 业务快速升级发展背后的系统架构演进

    本篇文章内容来自2016年TOP100summit美团●大众点评高级技术专家,酒店后台研发组eHome团队负责人许关飞的案例分享.编辑:Cynthia 许关飞:美团●大众点评高级技术专家,酒店后台研发 ...

  10. 初学的linux命令行

    这几条命令是今天刚初学的,以前总看别人输入命令,好利落,到自己了,真心觉得难.目前就学了这几个命令.后期等学会了,再进行添加 vm 文件名 ——> 新建文件: :wq  ——>  保存并退 ...