专栏首页叨叨软件测试Shell 字符串操作符实例

Shell 字符串操作符实例

字符串操作符

实例脚本

可以使用 sh -v testString.sh 命令来执行如下脚本,查看原始命令及输出内容,为了方便区分命令和内容,其中输出内容以深蓝色显示。

 1# 实例脚本
 2$ cat testString.sh
 3#!/bin/bash
 4# 字符串操作符实例
 5
 6# 判断操作系统,解决 mac下 echo 不支持“-e”参数问题
 7if [[ "$(uname)" != "Darwin" ]];then
 8    ee="-e"
 9fi
10
11# var 变量未声明
12echo ${ee} "\033[36mvar 变量未声明,输出为空: ${var}\033[0m"
13
14# 变量未声明,取默认值
15echo ${ee} "\033[36mvar 变量未声明,则取默认值:${var-daodaotest}\033[0m"
16echo ${ee} "\033[36mvar 变量未声明,则取默认值:${var=daodaotest}\033[0m"
17
18# 变量未声明或取值为空时,取默认值
19# 变量未声明,取默认值
20echo ${ee} "\033[36mvar2 变量未声明,则取默认值:${var2:-daodaotest2}\033[0m"
21echo ${ee} "\033[36mvar2 变量未声明,则取默认值:${var2:=daodaotest2}\033[0m"
22
23# 取值为空时
24var3=
25echo ${ee} "\033[36mvar3 变量声明,但值为空时,取默认值:${var3:-daodaotest3}\033[0m"
26echo ${ee} "\033[36mvar3 变量声明,但值为空时,取默认值:${var3:=daodaotest3}\033[0m"
27
28# 变量未声明,值为空;声明了为设置值
29echo ${ee} "\033[36mvar4 变量未声明,值为空:${var4+daodaotest4}\033[0m"
30var5=daodaotest5
31echo ${ee} "\033[36mvar5 变量声明,取设置值:${var5+daodaotest}\033[0m"
32
33# 变量未声明或取值为空时,打印设置信息且程序退出
34var6=daodaotest6
35echo ${ee} "\033[36mvar6 变量声明且取值,不打印设置信息:${var6?变量未声明或取值为空}\033[0m"
36
37# 变量未声明或取值为空时,打印设置信息且程序退出
38# 为了脚本继续运行注释掉
39#echo ${ee} "\033[36mvar7 变量未声明,打印设置信息:${var7:?变量未声明}\033[0m"
40#var8=
41#echo ${ee} "\033[36mvar8 取值为空,打印设置信息:${var7:?变量取值为空}\033[0m"
42
43# 通过前缀字符匹配声明过的变量名
44x1=1
45x2=2
46x3=3
47echo ${ee} "\033[36m通过前缀字符匹配声明过的变量名:${!x*}\033[0m"
48echo ${ee} "\033[36m通过前缀字符匹配声明过的变量名:${!x@}\033[0m"
49
50url="https://www.toutiao.com/i6820392125645980174"
51## 字符串长度
52echo ${ee} "\033[36m字符串内容:${url}\033[0m"
53echo ${ee} "\033[36m字符串长度:${#url}\033[0m"
54
55## 字符串截取
56# 字符串位置截取
57echo ${ee} "\033[36m从左边指定位置开始,截取后面所有字符串:${url:8}\033[0m"
58echo ${ee} "\033[36m从左边指定位置开始,截取指定长度字符串:${url:8:15}\033[0m"
59echo ${ee} "\033[36m从右边指定位置长度开始,截取后面所有字符串(注意“:”右边有空格):${url: -20}\033[0m"
60echo ${ee} "\033[36m从右边指定位置长度开始,截取后面所有字符串(同上,推荐):${url:0-20}\033[0m"
61echo ${ee} "\033[36m从右边指定位置长度开始,截取后面所有字符串(同上,推荐):${url:(-20)}\033[0m"
62echo ${ee} "\033[36m从右边指定位置开始,截取指定长度字符串(注意“:”右边有空格):${url:0-36:15}\033[0m"
63echo ${ee} "\033[36m从右边指定位置开始,截取指定长度字符串(同上,推荐):${url:0-36:15}\033[0m"
64echo ${ee} "\033[36m从右边指定位置开始,截取指定长度字符串(同上,推荐):${url:(-36):15}\033[0m"
65
66## 截取不匹配的字符串,即删除匹配的字符串
67echo ${ee} "\033[36m从右边开始,删除最短匹配字符串:${url#*/}\033[0m"
68echo ${ee} "\033[36m从右边开始,删除最长匹配字符串:${url##*/}\033[0m"
69
70echo ${ee} "\033[36m从左边开始,删除最短匹配字符串:${url%/*}\033[0m"
71echo ${ee} "\033[36m从左边开始,删除最长匹配字符串:${url%%/*}\033[0m"
72
73## 匹配项替换
74echo ${ee} "\033[36m从右边开始,替换第一次出现匹配项:${url/\//#}\033[0m"
75echo ${ee} "\033[36m替换所有匹配项:${url//\//#}\033[0m"
76
77echo ${ee} "\033[36m替换开头匹配字符串:${url/#https/http}\033[0m"
78echo ${ee} "\033[36m替换结尾匹配字符串:${url/%i6820392125645980174/daodaotest}\033[0m"
79
80param=daodaotest
81# macOS zsh 不支持
82echo ${ee} "\033[36m开头第一个小写字母转换为大写:${param^}\033[0m"
83echo ${ee} "\033[36m所有小写字母转换为大写:${param^^}\033[0m"
84
85param=DAODAOTEST
86# macOS zsh 不支持
87echo ${ee} "\033[36m开头第一个大写字母转换为小写:${param,}\033[0m"
88echo ${ee} "\033[36m所有大写字母转换为小写:${param,,}\033[0m"

本文分享自微信公众号 - 叨叨软件测试(daodaotest),作者:蒋李恒

原文出处及转载信息见文内详细说明,如有侵权,请联系 yunjia_community@tencent.com 删除。

原始发表时间:2020-05-01

本文参与腾讯云自媒体分享计划,欢迎正在阅读的你也加入,一起分享。

我来说两句

0 条评论
登录 后参与评论

相关文章

  • 技术债务(Technical debt)的产生原因及衡量解决

    通俗易懂的例子: 技术债务类似于金融债务。软件开发就像是去“贷款”,而技术债务就像是它的“利息”,“利息”是需要以未来额外的时间来还的。重构才相当于是支付“本金...

    叨叨软件测试
  • Linux/UNIX 下终端复用利器 tmux

    tmux 的三个重要概念:会话(session),窗口(window),窗格(pane)。

    叨叨软件测试
  • Jenkins 批量创建任务的三种方法

    最近,要搭建多套测试环境,需要把 Jenkins 中 dev 视图下的所有任务批量复制到 sit 等视图下。

    叨叨软件测试
  • printf不一样的玩法

    DeROy
  • shell脚本输出带颜色字体

    yaohong
  • ANSI控制码

    版权声明:本文为博主原创文章,遵循 CC 4.0 BY-SA 版权协议,转载请附上原文出处链接和本声明。 ...

    sofu456
  • shell中echo的显示格式 (r5笔记第58天)

    有时候使用shell就是为了达到简化工作的目的,其实在shell本身强大的功能下,其实还可以更好一些,功能再好,如果界面有时候不够美观,清晰,效果也会受到直接影...

    jeanron100
  • Python:输出带颜色的字

    转义序列是以ESC开头,即用\033来完成(ESC的ASCII码用十进制表示是27,用八进制表示就是033)。

    弄啥嘞
  • C语言实现简易Linux终端版本聊天室

    今天我们来实现一个简单的小项目,在这个项目中,我们将实现一个终端版的简易Linux聊天室。

    morixinguan
  • Python终端输出打印彩色字体的方法

    一  实现过程 终端的字符颜色是用转义序列控制的,是文本模式下的系统显示功能,和具体的语言无关。    转义序列是以ESC开头,即用\033来完成(ESC的A...

    用户1214487

扫码关注云+社区

领取腾讯云代金券