头歌--shell脚本入门 变量、字符串--第3关:shell 字符串

news2024/11/24 19:54:45

任务描述

本关带领大家熟悉 shell 的变量并掌握其使用。

相关知识

字符串概念

     字符串是 shell 编程中最常用最有用的数据类型(除了数字和字符串,也没啥其它类型好用了),字符串可以用单引号,也可以用双引号,也可以不用引号。

单引号 双引号 反引号的区别

     双引号 中可以有变量; 双引号里可以先转义字符;双引号中的单引号输出时维持单引号不变。请下面的案例: 例 1:

  1. #! /bin/bash
  2. var="aaa
  3. bbb
  4. ccc"
  5. echo ${var}
  6. ##输出结果为
  7. aaa bbb ccc

例 2:

  1. #! /bin/bash
  2. var="aaa
  3. bbb
  4. ccc"
  5. echo "${var}"
  6. ##输出结果为
  7. aaa
  8. bbb
  9. ccc

     单引号: 会忽略所有的特殊字符,即任何字符都会原样输出,包括定义的变量; 单引号字串中不能出现单引号。

  1. #! /bin/bash
  2. var="aaa
  3. bbb
  4. ccc"
  5. echo '${var}'
  6. ##输出结果为
  7. ${var}
  8. ###单引号无法解析变量,只会原样输出

    反引号 :  有命令替换的作用见例 3;反引号可以嵌套使用,但内层的单引号必须加上\ 进行转义见例 4。 例 3:

  1. $ echo the date is `date`
  2. the date is Tue Feb 4 18:08:12 CST 2020
  3. #这里的反引号 `date` 及为命令"date" 的结果,因此像引用一个命令返回的结果作为变量用 反引号 替换,也可以使用 $(date)的方式来替换使用命令结果

例 4:

  1. $ abc=`echo The number of users is \`who| wc -l\``
  2. $ echo $abc
  3. The number of users is 4
  4. ## 这里 `who|wc -l` 是指 返回的正在登录系统的用户的个数的结果 为4
  5. ## 因为反引号嵌套了反引号,所以在需要加上\转义

字符串常见操作表达式


示例:

获取字符串长度

  1. string="abcdefg"
  2. echo ${#string}

字符串截取

  1. ${string:position} //在$string中, 从位置$position开始提取子串
  2. ${string:position:length} //在$string中, 从位置$position开始提取长度为$length的子串
  3. 测试例子
  4. string="abc12342341"
  5. echo ${string:4} //2342341 从第4位开始截取后面所有字符串
  6. echo ${string:3:3} //123 从第3位开始截取后面3位
  7. echo ${string:3:6} //123423 从第3位开始截取后面6位
  8. echo ${string: -4} //2341 :右边有空格 截取后4位
  9. echo ${string:(-4)} //2341 同上
  10. echo ${str:(-6):5} //34234 从倒数第6个位置向左提取5个字符字符串,

字符串匹配删除

  1. ${string#substring} //从变量$string的开头, 删除最短匹配$substring的子串
  2. ${string##substring} //从变量$string的开头, 删除最长匹配$substring的子串
  3. ${string%substring} //从变量$string的结尾, 删除最短匹配$substring的子串
  4. ${string%%substring} //从变量$string的结尾, 删除最长匹配$substring的子串
  5. 测试例子
  6. test='c:/windows/boot.ini'
  7. $ echo ${test#/} (从头匹配斜杠/,删除匹配到最短的斜杠,没有匹配到,所以没有删除)
  8. c:/windows/boot.ini
  9. $ echo ${test#*/} (删除 从头匹配删除匹配到最短以/结尾的字符串,*是匹配0个或者多个)
  10. windows/boot.ini
  11. $ echo ${test##*/} (删除 从头匹配匹配到最长的以/结尾的字符串,通常可以用来获取到文件名)
  12. boot.ini
  13. $ echo ${test%/*} (删除 从尾部匹配以/开始最短的字符串,通常可以获取到文件路径前缀)
  14. c:/windows
  15. $ echo ${test%%/*} (删除 从尾部匹配以/开始最长的字符串)
  16. c:

字符串替换

  1. 表达式规则
  2. ${string/substring/replacement} 使用$replacement, 来代替第一个匹配的$substring
  3. ${string//substring/replacement} 使用$replacement, 代替所有匹配的$substring
  4. ${string/#substring/replacement} 如果$string的前缀匹配$substring, 那么就用$replacement来代替匹配到的$substring
  5. ${string/%substring/replacement} 如果$string的后缀匹配$substring, 那么就用$replacement来代替匹配到的$substring
  6. 测试列子:
  7. str="apple, tree, apple tree"
  8. echo ${str/apple/APPLE} # 替换第一次出现的apple
  9. APPLE, tree, apple tree
  10. echo ${str//apple/APPLE} # 替换所有apple
  11. APPLE, tree, APPLE tree
  12. echo ${str/#apple/APPLE} # 如果字符串str以apple开头,则用APPLE替换它
  13. APPLE, tree, apple tree
  14. echo ${str/%apple/APPLE} # 如果字符串str以apple结尾,则用APPLE替换它(str是以tree结尾的)
  15. apple, tree, apple tree
  16. 测试列子2:
  17. $ test='c:/windows/boot.ini'
  18. $ echo ${test/\//\\} (匹配的为\/,匹配的子串/需要转义,所以添加\,同理替换的字符串\转义为\\)
  19. c:\windows/boot.ini
  20. $ echo ${test//\//\\}
  21. c:\windows\boot.ini
  22. #${变量/查找/替换值} 一个“/”表示替换第一个,”//”表示替换所有,当查找中出现了:”/”请加转义符”\/”表示。

字符串比较     四种判断方式 == != < > (按 ascii 值比较大小), == 相等则为真,!= 不相等则为真。

  1. str="bacd"
  2. ##判断字符串是否相等 这里的== 也可以换做 = 但是一般情况下使用==
  3. if [ "$str"x == "abcdsd"x ]; then
  4. echo "相等"
  5. fi
  6. ##不相等则为真
  7. if [ "$str"x != "abcdsd"x ]; then
  8. echo "不相等"
  9. fi
  10. ##注意 比较字符串是否相等,可以字符串后面+上个别的字符,如果str为空的话,可以防止表达式报错:[: =: unary operator expected

实践要求

按照右侧“代码文件”中提示的要求补全代码,本关的目的,是希望通过学习,对于字符串的使用能有一个大致的了解,在实际工作中遇到需要对某一个字符串处理的时候,能够找到对应的方法。

评测说明

     按要求补全代码后,点击测评按钮 ,这里点击评测按钮,平台会对你编写的代码进行测试,当你的结果与预期输出一致时,即为通过。

 代码 

# !/bin/bash

string1="Hello www.educoder.net, hello linux! hello Shell ,Hello CNCF,hello Kubernetes,redis"


#********* Begin *********#

##1、str1 为 替换string1中第一次出现的 "Hello"为"hello"后的字符串
str1=${string1/Hello/hello}

##2、str2 为 替换string1中所有的"Hello"为"hello"后的字符串
str2=${string1//Hello/hello}

##3、str3 为 删除string1中的字符串"Kubernetes,"后的字符串
str3=${string1/Kubernetes,/ }


##4、变量letnth为字符串string1的长度,判断string1长度 完成如下代码:
##如果超过50则输出 "Length over 50" 如果小于等于50则输出"Length less than 50 "

lenth=${#string1}

if [ $lenth -gt 50 ]; then

        echo "Length over 50"
else
        echo "Length less than 50"

fi


#*********  End  *********#

echo $str1
echo $str2
echo $str3

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.coloradmin.cn/o/456903.html

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

数据库系统概论--期末复习

目录 一.绪论 一.数据库系统概述 二.数据模型 三.数据库系统的结构 四.数据库系统的组成 二.关系数据库 一.关系数据结构及形式化定义 二.关系操作 三.关系的完整性 四.关系代数 三.SQL语言 一.数据定义 二.数据查询 三.数据更新 四.视图 四.数据库安全性 1.不安…

Access Token 访问令牌 如何获取?

一、引用 三方库导入时&#xff0c;通常需要输入账号和令牌进行鉴权。账号为指定平台的 HTTP 克隆账号&#xff0c;访问令牌即 Access Token&#xff0c;本文介绍如何获取常见三方代码平台的Access Token。 Access Token 通常在代码平台的个人账号设置内进行管理和配置&#xf…

给konva加个刻度尺

给konva加个刻度尺 最近在用konva做一些&#xff0c;一开始写了不少辅助函数。帮助自己给物体定位 &#xff0c;现在贡献出来给大家用。 给图层增加刻度尺 顾名思义就是加个刻度显示&#xff0c;效果如下&#xff1a; 代码&#xff1a; 第一个参数时layer&#xff0c;第二个…

居民配电所远程监控解决方案

一、项目背景 随着城市建设提速发展、能源利用日益提高、环保节能成为了城市发展的新趋势&#xff0c;配电站逐渐成为企业和居民生活中不可或缺的组成部分。居民的生活用电需求也日益增大。如果没有及时处理好用电安全很容易出现电力中断等情况发生。因此及时高效地为用电客户…

区域LIS源码,基于云计算B/S架构医学实验室检验系统源码

基于B/S架构的医学实验室检验系统源码&#xff0c;整个系统的运行基于WEB层面&#xff0c;只需要在对应的工作台安装一个浏览器软件有外网即可访问。全套系统采用云部署模式&#xff0c;部署一套可支持多家医院检验科共同使用。 采用.Net Core新的技术框架、DEV报表、前端js封…

CASS方格网法土石方量计算

1、打开软件&#xff0c;在“绘图处理”-“展野外测点点号”&#xff0c;默认比例尺为1:500&#xff0c;如下&#xff1a; 2、打开后&#xff0c;在命令行输入pl&#xff0c;绘制范围线&#xff0c;将所有点大致圈起来&#xff0c;如下&#xff1a; 展点结果 范围线绘制结果 3…

【软件测试面试】性能测试常问面试题?不备这些真不敢去面了...

目录&#xff1a;导读 前言一、Python编程入门到精通二、接口自动化项目实战三、Web自动化项目实战四、App自动化项目实战五、一线大厂简历六、测试开发DevOps体系七、常用自动化测试工具八、JMeter性能测试九、总结&#xff08;尾部小惊喜&#xff09; 前言 性能测试的应用领…

给图片加颜色边框怎么弄,3种好用方法

给图片加颜色边框怎么弄&#xff1f;图片是我们每个人平时都必不可少的文件之一&#xff0c;尤其是在工作中的使用&#xff0c;不同的使用场景对于图片的要求也是不一样的&#xff0c;这就要求我们具有一定的图片处理技能&#xff0c;现在任何事情都离不开电脑&#xff0c;所以…

操作系统原理 —— 进程状态切换具体做了哪些事情?(八)

什么是进程控制&#xff1f; 进程控制的主要功能是&#xff1a;对系统中的所有进程实施有效的管理&#xff0c;它具有创建新进程、撤销已有进程、实现进程状态转换等功能。 简单来说&#xff0c;就是进程控制就是要现实进程状态的转换。 那如何实现进程的控制呢&#xff1f;…

案例01-tlias智能学习辅助系统02-文件上传

4.6 文件上传 若要实现下方的文件上传页面&#xff0c;需要前后端做如下操作&#xff1a; 后端&#xff1a; 本地存储 云存储 阿里云官方文档说明 具体实现参考上方连接&#xff0c;不再详细说明 阿里云OSS快速入门请参考文档&#xff1a; AliOSS.md &#xff08;在talis文…

不同场景下的并发容器选择

在并发编程中&#xff0c;我们经常会使用容器来存储数据或对象&#xff0c;可以依据场景的变化选择多种容器。 Map并发容器 因为在 JDK1.7 之前&#xff0c;在并发场景下使用 HashMap 会出现死循环&#xff0c;从而导致 CPU 使用率居高不下&#xff0c;而扩容是导致死循环的主…

扫描电镜学习手册

SEM测试&#xff0c;在通俗意义上来讲&#xff0c;可以看成是一个放大倍数超级大的“放大镜”。 作为当今十分有用的科学研究仪器&#xff0c;扫描电子显微镜是介于透射电镜和光学显微镜之间的一种微观性貌观察手段&#xff0c;可直接利用样品表面材料的物质性能进行微观成像。…

eureka注册中心和RestTemplate

eureka注册中心和restTemplate的使用说明 eureka的作用 消费者该如何获取服务提供者的具体信息 1.服务者启动时向eureka注册自己的信息 2.eureka保存这些信息 3.消费者根据服务名称向eureka拉去提供者的信息 如果有多个服务提供者&#xff0c;消费者该如何选择&#xff1f; 服…

基于JavaSpringMVC+Mybatis+Jquery高校毕业设计管理系统设计和实现

基于JavaSpringMVCMybatisJquery高校毕业设计管理系统设计和实现 博主介绍&#xff1a;5年java开发经验&#xff0c;专注Java开发、定制、远程、指导等,csdn特邀作者、专注于Java技术领域 作者主页 超级帅帅吴 Java项目精品实战案例《500套》 欢迎点赞 收藏 ⭐留言 文末获取源码…

CCBN 2023看点分析:国产8K摄像机国产化替代趋势增强

4月21日&#xff0c;为期3天的CCBN 2023&#xff08;第29届中国国际广播电视信息网络展览会&#xff09;在北京首钢会展中心圆满落幕&#xff0c;CCBN展会是亚洲广播电视设备展览会&#xff0c;也是中国广电行业规模最大、影响力最强的国际性展会之一&#xff0c;更是广电行业内…

Linux环境下(CentOS7)CC攻击——如何用CC攻击对网站进行压力测试(仅限于压力测试)

小编温馨提醒&#xff1a;请正确使用ddos攻击&#xff0c;不要用来做违反当地法律法规的事情&#xff0c;否则后果请自负&#xff01;&#xff01;&#xff01;&#xff01; 阿里云服务器链接 &#xff08;学生党可白嫖16个月ECS云服务器&#xff09; 高校计划 - 免费学生云…

通话蓝牙耳机什么牌子好?通话效果好的无线蓝牙耳机

这几年真无线蓝牙耳机市场发展迅速&#xff0c;从音质到续航再到现在的降噪能力&#xff0c;技术的不断进步也让厂家不断推陈出新&#xff0c;但是也导致许多人不知道从何选择&#xff0c;下面整理了几款通话效果不错的无线蓝牙耳机&#xff0c;可做参考。 一、南卡小音舱Lite…

1.栈的介绍-C语言调用函数(一)

目录 源代码变为可执行文件的过程 栈是什么 入栈过程 出栈过程 C语言函数调用栈 寄存器 EAX,EBX,ECX,EDX 寄存器使用约定 栈帧 调用的解释 释放的解释 堆栈操作 函数调用的操作 堆栈的主要指令 push/pop call/leave/ret 函数序和函数跋 我们在数据结构中学习…

事件抽取:Document-level Event Extraction via Parallel Prediction Networks

任务&#xff1a;给定一篇文章&#xff0c;从中提取出一个或多个结构化的事件 Y { y i } i 1 k Y\{y_i\}_{i1}^{k} Y{yi​}i1k​ ,其中每个事件 t t t事件类型 y i t y_{i}^{t} yit​表示是&#xff0c;包含一系列角色 ( r i 1 , r i 2 , . . . , r i n ) (r_{i}^{1},r_{i}^{…

构建高效数据中台——数据只有被使用起来,才能创造价值

产品经理们时常会碰到这种问题&#xff1a; 我刚上线一个功能&#xff0c;请研发同志们帮我拉个数据出来分析&#xff0c;却被残酷告知需要排期。 我这里急得跺脚&#xff0c;但也只能理解。 数据研发们每天有查不完的数据和写不完的表&#xff0c;业务部门要的数据迟迟拿不到&…