前言

对字符串的操作在众多的编程语言中可以说是最基础的了,字符串(String)就是一系列字符的组合。字符串是 Shell 编程中最常用的数据类型之一(除了数字和字符串,也没有其他类型了)。

一、shell 中字符串的几种格式

在shell中,字符串主要有下面几类写法:

  1. 单引号方式

  2. 双引号方式, 推荐

  3. 不用引号方式

三种写法的区别

1、使用单引号 '' 的字符串:

任何字符都会原样输出,在其中使用变量是无效的。

2、由双引号" "包围的字符串:

1)其中包含了变量,那么该变量会被解析得到值,而不是原样输出;

2)字符串中还可以出现双引号的子字符串,但是需要转义;

3、不被引号包围的字符串

1)不被引号包围的字符串中出现变量时也会被解析,这一点和双引号" "包围的字符串一样;

2)字符串中不能出现空格,否则空格后边的字符串会作为其他变量或者命令解析;

二、字符串常用操作

1、获取字符串长度

${#字符串变量名}

2、字符串拼接

几种常用的拼接方式:

  1. 无符号拼接

  2. 双引号拼接

  3. 混合拼接

无符号拼接

双引号拼接

混合拼接

3、字符串截取

字符串截取操作在众多的编程语言中可以说是非常常见的一种操作了,尤其是在python语言中,使用非常高频,而在shell中,也提供了毕竟丰富的字符串截取的操作;

格式 说明
${变量名:start:length} 从 string 字符串的左边第 start 个字符开始, 向右截取 length 个字符。
${变量名:start} 从 string 字符串的左边第 start 个字符开始截取,直到最后。
${变量名:0-start:length} 从 string 字符串的右边第 start 个字符开始, 向右截取 length 个字符。
${变量名:0-start} 从 string 字符串的右边第 start 个字符开始截取,直到最后。
${变量名#*chars} 从 string 字符串第一次出现 *chars 的位置开始, 截取 *chars 右边的所有字符。
${变量名##*chars} 从 string 字符串最后一次出现 *chars 的位置开始, 截取 *chars 右边的所有字符。
${变量名%chars*} 从 string 字符串最后第一次出现 chars* 的位置开始, 截取 chars* 左边的所有字符。
${变量名%%chars*} 从 string 字符串第一次出现 chars* 的位置开始, 截取 chars* 左边的所有字符

下面随机演示几个截取的操作命令

三、数组

Shell 支持数组(Array), 数组是若干数据的集合,其中的每一份数据都称为数组的元素。

注意Bash Shell 只支持一维数组,不支持多维数组

1、数组语法

在 Shell 中,用括号( )来表示数组,数组元素之间用空格来分隔. 语法为

array_name=(item1  item2 ...)          # 方式1
array_name=([索引下标1]=item1  [索引下标2]=item2  ...)          # 方式2

注意,赋值号 = 两边不能有空格

2、数组定义

使用小括号定义一组数字

num1=(1 2 3 4 5)

数组中可以存在不同类型的元素

num1=(1 2 3 4 “hello”)

Shell数组元素定义后不是固定的, 定义后还可以赋值

arr[6]=100

也可以给指定元素赋值初始化

arr2=([0]=1 [2]=100 [4]=aa)

3、数组中值的获取

1.通过下标获取元素值,index从0开始

${arr[index]}

2、获取值同时复制给其他变量

item=${arr[index]}

3、使用 @* 可获取数组中的所有元素

${arr[@]}
${arr[*]}

4.获取数组的长度或个数

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

5.获取数组指定元素的字符长度

${#arr[索引]}

4、数组的拼接

所谓 Shell 的数组拼接(数组合并),就是将两个数组连接成一个数组

语法

使用 @* 获取数组所有元素之后进行拼接:

array_new=(${array1[@]} ${array2[@]} ...)
array_new=(${array1[*]} ${array2[*]} ...)

案例展示

5、数组的删除

删除数组指定元素数据

unset array_name[index]

删除整个数组

unset array_name

案例展示:删除num1 中的第一个元素

案例展示:删除num1这个数组

【linux】shell 编程之字符串与数组相关推荐

  1. linux shell编程学习——数组使用

    linux的shell的编程方面很强大,最近在写脚本的时候,需要用到shell的数组.下面对最近的学习和使用做个简单的总结. 定义 linux的数组分两种,一种是普通的下标数组,一种是关联数组.前者和 ...

  2. Linux Shell 编程学习总结

    Shell 教程 Shell简介:什么是Shell,Shell命令的两种执行方式 Shell本身是一个用C语言编写的程序,它是用户使用Unix/Linux的桥梁,用户的大部分工作都是通过Shell完成 ...

  3. linux —— shell 编程(文本处理)

    导读 本文为博文 linux -- shell 编程(整体框架与基础笔记)的第4小点的拓展.(本文所有语句的测试均在 Ubuntu 16.04 LTS 上进行) 目录 基本文本处理 流编辑器sed a ...

  4. 【“计算机科学与技术”专业小白成长系列】Linux Shell 编程 极简教程

    Linux Shell 编程 极简教程 内容摘要 本文是 Linux Shell 编程简单入门.主要内容: Linux 简介 Shell 编程入门 Kotlin 脚本与 Shell 脚本 Linux ...

  5. 《Linux Shell编程从初学到精通(第2版)》pdf

    下载地址:网盘下载 内容简介 编辑 shell是用户与内核进行交互操作的一种接口,是linux最重要的软件之一.目前最流行的shell称为bash shell,bash shell脚本编程以其简洁.高 ...

  6. linux shell 处理日语,linux —— shell 编程(文本处理)

    导读 本文为博文linux -- shell 编程(整体框架与基础笔记)的第4小点的拓展.(本文所有语句的测试均在 Ubuntu 16.04 LTS 上进行) 1.基本文本处理 sort:用于排序,常 ...

  7. 「Linux」Linux Shell 编程基础入门

    Linux Shell 编程基础入门 1. 变量 1.1 变量定义 1.2 使用变量 1.3 引号 1.4 将命令的结果赋值给变量 1.5 位置参数 1.6 特殊变量及其含义 2. 字符串 2.1 字 ...

  8. linux .sh文件详解,干货讲解之Linux Shell编程

    原标题:干货讲解之Linux Shell编程 Shell 教程 Shell 是一个用 C 语言编写的程序,它是用户使用 Linux 的桥梁.Shell 既是一种命令语言,又是一种程序设计语言. She ...

  9. Linux Shell编程

    Linux Shell编程 一.简述       简单的介绍shell脚本的基本用法.      shell脚本是 由一些按照一定格式组合起来的shell命令 组成.shell脚本不需要编译就可以直接 ...

最新文章

  1. ps aux|grep
  2. 用mysql做文本挖掘_手把手教你做文本挖掘
  3. Jmeter之HTTP Request Defaults
  4. 开源CMS webEdition 6发布
  5. Qt的json对象不具备类似指针、引用的行为导致的更新不成功问题解决
  6. 【原题】【noip 2003 T2】【动态规划】加分二叉树
  7. mybatis 一对一 一对多 级联查询
  8. Javascript设置对象属性为只读
  9. Oreilly.Python.Cookbook(3rd.Edition.May.2013)pdf
  10. mysql GROUP_CONCAT 排序
  11. Win10 Anaconda下TensorFlow-GPU环境搭建详细教程(包含CUDA+cuDNN安装过程)
  12. java 字符串随机排列_Java 随机字符串排序
  13. matlab模拟换热过程,第5章Hysys模拟换热过程.ppt
  14. [渝粤教育] 中南大学 分子生物学 参考 资料
  15. 路由器和交换机的作用及区别,不再为路由器的选择而烦恼
  16. CocosCreator快速接入bugly
  17. 大型网站--负载均衡架构
  18. 庄曜计算机应用作曲电子书阅读,庄曜计算机应用作曲的意义
  19. 实验二 基于FPGA的分频器的设计(基本任务:设计一个分频器,输入信号50MHz,输出信号频率分别为1KHz、500Hz及1Hz。拓展任务1:用按键或开关控制蜂鸣器的响与不响。拓展任务2:用按键或开)
  20. 使用nginx实现请求转发的功能

热门文章

  1. 2022年第十四届“华中杯”大学生数学建模挑战赛
  2. 特征选择的几种常见方法
  3. SpringBoot整合AlertManager,实现自定义的告警收敛以及邮件处理,告警风暴,解决重复告警问题
  4. 机器学习05|一万五字:SVM支持向量机02 【jupyter代码详解篇】
  5. Python实现支持向量机SVM分类模型线性SVM决策过程的可视化项目实战
  6. Python机器学习及实践——基础篇9(SVM回归)
  7. 粗点心之NodeList和Array
  8. InternalEror :Dst tensor is not initialized
  9. ES6 Set() 数组去重
  10. MoveIt! Tutorials, MoveIt! 教程——demo