linux基础学习第十三天(数组、字符串变量处理)

2016-08-22

授课内容:

数组

高级字符串操作

一、数组

变量:存储单个元素的内存空间

数组:存储多个元素的连续的内存空间,相当于多个变量的集合。

数组名和索引

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

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

1、声明数组:

declare -a ARRAY_NAME(并非强制声明,但最好按规范声明)

declare -A ARRAY_NAME: 关联数组

2、数组元素的赋值:

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

ARRAY_NAME[INDEX]=VALUE

[19:41 [email protected]~]# arr=(1 2 3 4 5)
[19:41 [email protected]~]# echo ${arr[@]}
1 2 3 4 5
[19:41 [email protected]~]# arr[5]=88
[19:41 [email protected]~]# echo ${arr[@]}
1 2 3 4 5 88
[19:41 [email protected]~]# arr[10]=188
[19:42 [email protected]~]# echo ${arr[@]}
1 2 3 4 5 88 188

(2) 一次赋值全部元素:

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

[19:41 [email protected]~]# arr=(1 2 3 4 5)
[19:41 [email protected]~]# echo ${arr[@]}
1 2 3 4 5

3、引用数组:

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

[19:43 [email protected]~]# echo ${arr[@]}
1 2 3 4 5 88 188
[19:43 [email protected]~]# echo ${arr[1]}
2

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

${#ARRAY_NAME[*]}

${#ARRAY_NAME[@]}

[19:44 [email protected]~]#echo ${arr[@]}
1 2 3 4 5 88 188
[19:44 [email protected]~]# echo ${#arr[@]}
7
[19:44 [email protected]~]# echo ${#arr[*]}
7

4、数组数据处理:切片

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

offset: 要跳过的元素个数

number: 要取出的元素个数

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

[19:46 [email protected]~]# echo ${arr[@]}
1 2 3 4 5 88 188
[19:46 [email protected]~]# echo ${arr[@]:2:3}
3 4 5 #跳过两个元素,取后面三个元素

5、删除数组中的某元素:导致稀疏格式

unset ARRAY[INDEX]

二、字符串处理

1、字符串切片:

${#var}:返回字符串变量var的长度

${var:offset}:返回字符串变量var中从第offset个字符后(不包括第offset个字符)的字符开始,到最后的部分,offset的取值在0 到${#var}-1 之间

${var:offset:number}:返回字符串变量var中从第offset个字符后(不包括第offset个字符)的字符开始,长度为number的部分

${var: -lengh}:取字符串的最右侧几个字符:

注意:冒号后必须有一空白字符

[19:50 [email protected]~]# str="nihaolinux"
[19:51 [email protected]~]# echo $str
nihaolinux
[19:51 [email protected]~]# echo ${#str}
10 #取字符串的长度
[19:51 [email protected]~]# echo ${str:2}
haolinux #从第二个字符串(不包括第二个)开始到最后
[19:51 [email protected]~]# echo ${str:2:3}
hao #从第二个字符串(不包括第二个)开始取后三个字符
[19:51 [email protected]~]# echo ${str: -5}
linux#取最后侧起5个字符

2、基于模式取子串:

(1)${var#*word}:其中word可以是指定的任意字符

功能:自左而右,查找var变量所存储的字符串中,第一次出现的word, 删除字符串开头至第一次出现word字符之间的所有字符

(2)${var##*word}

同上,不同的是,删除的是字符串开头至最后一次由word指定的字符之间的所有内容

(3)${var%word*}:其中word可以是指定的任意字符;

功能:自右而左,查找var变量所存储的字符串中,第一次出现的word, 删除字符串最后一个字符向左至第一次出现word字符之间的所有字符;

(4)${var%%word*}

同上,只不过删除字符串最右侧的字符向左至最后一次出现word字符之间的所有字符;

[19:55 [email protected]~]# str=`getent passwd root`
[19:56 [email protected]~]# echo $str
root:x:0:0:,,62985600:/root:/bin/bash
[19:56 [email protected]~]# echo ${str#*root} #删除第一次出现root(包含)字符串及之前的字符
:x:0:0:,,62985600:/root:/bin/bash
[19:56 [email protected]~]# echo ${str##*root} #删除最后出现root(包含)字符串及之前的字符
:/bin/bash
[19:56 [email protected]~]# echo ${str%root*} #删除从右到左第一次出现root(包含)字符串及之前的字符
root:x:0:0:,,62985600:/
[19:56 [email protected]~]# echo ${str%%root*} #删除从右到左最后出现root(包含)字符串及之前的字符

3、查找替换

(1)${var/pattern/substi}:

查找var所表示的字符串中,第一次被pattern所匹配到的字符串,以substi替换之

(2)${var//pattern/substi}:

查找var所表示的字符串中,所有能被pattern所匹配到的字符串,以substi替换之

(3)${var/#pattern/substi}:

查找var所表示的字符串中,行首被pattern所匹配到的字符串,以substi替换之

(4)${var/%pattern/substi}:

查找var所表示的字符串中,行尾被pattern所匹配到的字符串,以substi替换之

[19:57 [email protected]~]# echo ${str/root/ROOT}
ROOT:x:0:0:,,62985600:/root:/bin/bash
[20:01 [email protected]~]# echo ${str//root/ROOT}
ROOT:x:0:0:,,62985600:/ROOT:/bin/bash
[20:02 [email protected]~]# echo ${str/#root/ROOT}
ROOT:x:0:0:,,62985600:/root:/bin/bash
[20:02 [email protected]~]# echo ${str/%bash/BASH}
root:x:0:0:,,62985600:/root:/bin/BASH

4、查找并删除

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

${var//pattern}:所有

${var/#pattern}:首行

${var/%pattern}:行尾

[20:02 [email protected]~]# echo ${str/root}
:x:0:0:,,62985600:/root:/bin/bash
[20:05 [email protected]~]# echo ${str//root}
:x:0:0:,,62985600:/:/bin/bash
[20:05 [email protected]~]# echo ${str#root}
:x:0:0:,,62985600:/root:/bin/bash
[20:06 [email protected]~]# echo ${str%bash}
root:x:0:0:,,62985600:/root:/bin/

三、创建临时文件

mktemp命令:创建的临时文件可避免冲突

mktemp[OPTION]... [TEMPLATE]

TEMPLATE: filename.XXX

【X至少要出现三个】

OPTION:

-d: 创建临时目录

--tmpdir=/DIR:指明临时文件所存放的目录位置

实例:

#mktemp--tmpdir=/testdirtest.XXXXXX

时间: 2024-10-12 13:57:50

linux基础学习第十三天(数组、字符串变量处理)的相关文章

linux基础学习第二十三天之openssh、sudo

内容: 1.openssh的介绍和使用 (1)sshd的服务端配置 (2)基于密钥登陆ssh的使用 (3)scp的使用 (4)rsync的使用 2.sudo的介绍和配置使用 一.openssh OpenSSH与SSH协议是远程登录的首选连接工具.它加密所有流量,以消除窃听,连接劫持和其它攻击. OpenSSH的套件包括以下工具: 远程操作使用 SSH, SCP,和 SFTP. 密钥管理 ssh-add, ssh-keysign, ssh-keyscan和ssh-keygen 服务端组成 sshd

linux基础学习第二十三天linux安全和加密之SSL\TLS协议、CA、openssl

内容: 1.通信加密类型及算法 2.TLS/SSL协议的引入及其通信过程 3.CA.数字签名的引入 4.一个安全的数据通信交换过程 5.openssl工具的使用 6.自制私有根CA过程 一.通信加密类型及算法 数据加密通信的重要性不言而喻,美国NIST,为了保证计算机的安全,提出了几个要求: (1).数据要有保密性:数据保密性和隐私性:确保信息不被别人获取,个人存储的信息不能被别人收集到: (2).完整性:包括数据完整性和系统完整性:数据完整性确保数据和程序只能以特定权限的进行授权和改变,只能授

linux基础学习(十三)常用检索命令

###1.diff### diff            file  file1                ##比较两个文件的不同 -c                                  ##显示周围的行 -u                                  ##按照一定格式统一输出生成补丁 -r                                   ##比较两个目录中文件的不同 patch         file     file.path

javascript基础学习(十三)

javascript之文档对象 学习要点: 文档对象 文档对象的应用 一.文档对象 Document对象是代表一个浏览器窗口或框架中的显示HTML文件的对象.javascript会为每个HTML文档自动创建一个Document对象.通过Document对象可以操作HTML文档中的内容及其他对象. Document对象的子对象: Anchor对象,Applet对象,Cookie对象,Embed对象,Form对象,Image对象,Link对象,Location对象,Plugin对象. 二.文档对象的

C语言基础学习2:字符数组

在C语言的基本数据类型中没有没有字符串变量,一般以字符数组的形式给出. 1.字符串数组的初始化 char c[] = {'I', ' ', 'a', 'm', 'h', 'a', 'p', 'p', 'y'}; char c[] = "I am happy"; 区别:第一种方式字符串长度为10,内存中占10*sizeof(char)个字节,第二种方式是以字符串形式表示,有一个字符串结束字符'\0',内存中占11*sizeof(char)个字节. 2.字符数组的输入输出 %c,一个一个字

C语言基础学习8:指针数组

一个数组,若其元素均为指针类型数据,称为指针数组,指针数组中的每一个元素都相当于一个指针变量. 一维指针数组的定义形式为: 类型名 *数组名[数组长度]: 例如:int *p[4]; []的优先级比*高,因此p先与[4]结合,形成p[4]形式,这是数组形式,然后再与p前面的"*"结合,"*"表示此数组是指针类型的,每个数组元素都可指向一个整型变量. 为什么要用到指针数组呢? 因为它比较适合于用来指向若干个字符串,使得字符串处理更加灵活. 1 #include <

linux基础学习笔记——操作大全

作者:liaoyi 更新时间:2014-6-2 ****************基本操作***************** 关机 shutdown -h now    root用户               init 0              root用户halt      root+一般用户poweroff 重启shutdown -r now    root用户init6     root用户reboot            root+一般用户 注意:1.shutdown 比较灵活,可

c/c++unix/linux基础学习笔记-常用命令和vi的使用

linux 基本命令的使用-命令在ubuntu下面执行,有些命令通用其他linux,有些不通用. 多条命令间用;号隔开,回车后可以一起执行. clear-前屏,pwd显示当前目录,cd跳转目录. sudo [命令]  -ubuntu 下以管理员身份运行命令. 一般情况下,运行当前目录下的程序,要用 ./文件名 执行. 查看当前shell名称:ps 进入另外一个shell,直接输入shell名称:ksh/tcsh/sh/bash,退出一个shell用:exit. 切换shell命令,如:exec

Linux基础学习-crond系统计划任务

系统计划任务 大部分系统管理工作都是通过定期自动执行某个脚本来完成的,那么如何定期执行某个脚本,从而实现运维的自动化,这就要借助Linux的cron功能了. 计划任务分为一次性计划任务和周期性计划任务. 一次性计划任务 每晚11店30分开启网站服务. 周期性计划任务 每周一的凌晨3点30分把/var/www/html目录打包备份为backup.tar.gz 顾名思义,一次性计划任务只执行一次,一般用于满足临时的工作需求,可以使用at命令实现. 如果你的Linux没有此命令可以使用yum inst