数组

声明数组

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. [Laravel] 14 - REST API: Laravel from scratch

    前言 一.基础 Ref: Build a REST API with Laravel API resources Goto: [Node.js] 08 - Web Server and REST AP ...

  2. [UI] 05 - Bootstrap: built-in components

    前言 一.资源 From: http://www.imooc.com/code/3777 内置组件 一.缩略图 <div class="col-xs-6 col-md-3"& ...

  3. Shape使用

    <shape> <!-- 实心 --> <solid android:color="#ff9d77"/> <!-- 渐变 --> & ...

  4. linux命令之间的分号,&&, ||

    在用linux命令时候, 我们经常需要同时执行多条命令, 那么命令之间该如何分割呢? 分号: 顺序地独立执行各条命令, 彼此之间不关心是否失败, 所有命令都会执行. &&  : 顺序执 ...

  5. 数据结构与算法——基数排序简单Java实现

    基数排序(radix sort)又称“桶子法”,在对多个正整数进行排序时可以使用.它的灵感来自于队列(Queue),它最独特的地方在于利用了数字的有穷性(阿拉伯数字只有0到9的10个). 基数排序使用 ...

  6. mysql随机查询若干条数据的方法

  7. js将图片转换为base64

    直接上代码: var img = "imgurl";//imgurl 就是你的图片路径 function getBase64Image(img) { var canvas = do ...

  8. hashMap 和linkedHashMap

    hashMap是个单向链表的数组 linkedHashMap是个双向链表的数组,modal就是linkedHashMap

  9. jdbc--------JdbcUtilDao 类

    2018-12-14 目标:做成一个比较通用的 sql 操作 import com.ljs.util.JDBCUtil; 类名:JdbcUtilDao 1: 更新操作, 针对任何表,增加,删除,更新操 ...

  10. mapReducer第一个例子WordCount

    mapreducer第一个例子,主要是统计一个目录下各个文件中各个单词出现的次数. mapper package com.mapreduce.wordCount; import java.io.IOE ...