一.统计字符串长度

1.wc –L

[root@~_~day4]# echo "hello" | wc -L

5

2.expr length string

[root@~_~day4]# echo `expr length "hello"`

5

3.${#String}

[root@~_~day4]# a="hello"

[root@~_~day4]# echo ${#a}

5

压力测试实验:

[root@~_~~]# echo $chars

hello world

[root@~_~~]# time for i in $(seq 11111);do count=${#chars};done

real  0m0.069s

user 0m0.069s

sys   0m0.001s

[root@~_~~]# time for i in $(seq 11111);do count=`echo expr length "#chars"`;done

real  0m3.949s

user 0m0.481s

sys   0m3.853s

[root@~_~~]# time for i in $(seq 11111);do count=`echo ${chars}| wc -L`;done

real  0m13.643s

user 0m2.743s

sys   0m14.989s

注意:内置命令运行比管道快得多,速度快慢如下:${#string}>${string} |wc -L >${expr length "$string"}

二.字符串模式匹配

1.查看所有帮助:

首先:man bash

然后:/Parameter Expansion

2.截取字符串长度

${parameter:offset} :从offset截取到字符串结尾

${parameter:offset:length} :从offset截取长度为length的字符串

[root@~_~day4]# a="hello world"

[root@~_~day4]# echo ${a:2:3}

Llo

[root@~_~day4]# echo ${a:2}

llo world

3.替换

${parameter/pattern/string}:用一种匹配模式pattern匹配字符串,并用string替代

(1).${myString/#beginStr/replaceStr} :前面匹配

(2).${myString/%endStr/replaceStr}:后面匹配

(3).${myString/matchStr/replaceStr}:匹配第一个matchStr

[root@~_~day4]# a="hello world"

[root@~_~day4]# echo ${a/#hello/"你好"}

你好 world

[root@~_~day4]# echo ${a/%world/"世界"}

hello 世界

[root@~_~day4]# a="hello hello world"

[root@~_~day4]# echo ${a/hello/"你好"}

你好 hello world

4.删除

${parameter#word}:从变量string开头开始删除最短匹配$word子串

${parameter##word}:从变量string开头开始删除最长匹配$word子串

${parameter%word}:从变量string结尾开始删除最短匹配$word子串

${parameter%%word}:从变量string结尾开始删除最长匹配$word子串

[root@~_~day4]# echo ${a##hello}

hello worldworld

[root@~_~day4]# echo ${a#hello}

hello worldworld

[root@~_~day4]# a="hello hello worldworld"

[root@~_~day4]# echo ${a%world}

hello hello world

[root@~_~day4]# echo ${a%%world}

hello hello world

三.空值处理

1.${parameter:-word}  Use Default Values. 当${parameter}的值为空或是没有设定,用word的值将作为表达式的值,否则${parameter}就是表达式的值

[root@~_~day4]# echo ${myvalue:-hello}

hello

[root@~_~day4]# echo ${myvalue}

[root@~_~day4]# myvalue="test"

[root@~_~day4]# echo ${myvalue:-hello}

test

2.${parameter:=word}  Assign Default Values. 当${parameter}的值为空或是没有设定,将word的值赋予${parameter}将并作为表达式的值,否则${parameter}就是表达式的值

[root@~_~day4]# echo ${secondevalue:=hello}

hello

[root@~_~day4]# echo ${secondevalue}

hello

[root@~_~day4]#

3.${parameter:?word}  Display  Error  if  Null  or  Unset

当${parameter}值为空或者没有设定的时候,用[word]值作为标准错误输出提示并退出shell且返回非0状态。否则它就是该表达式的值

[root@~_~day4]# echo ${myparam:?"the value is empty"}

-bash: myparam: the value is empty

[root@~_~day4]# echo ${myparam}

[root@~_~day4]#

4.${parameter:+word}  Use Alternate Value

当${parameter}值为空或者没有设定的时候,表达式返回null。否则用[word]替换表达式的值。

[root@~_~day4]# echo ${myparam:+"the value is empty"}

[root@~_~day4]# myparam="hello"

[root@~_~day4]# echo ${myparam:+"the value is empty"}

the value is empty

[root@~_~day4]#

shell基础--字符串和变量的操作的更多相关文章

  1. shell基础——字符串处理(转载)

    Shell的字符串处理   1 得到长度   %x="abcd"  #方法一      %expr length $x      4  # 方法二      %echo ${#x} ...

  2. 『忘了再学』Shell基础 — 21、变量的测试与内容置换

    目录 1.什么是变量的测试与内容置换 2.变量的测试与内容置换 3.示例 例1: 例2: 例3: 1.什么是变量的测试与内容置换 我们之前说过,在Shell中,一个变量未定义,和一个变量为空值的输出效 ...

  3. Linux学习笔记(16)shell基础之Bash变量

    1. 用户自定义变量 (1)变量设置规则 ① 变量名称可由字母.数字和下划线组成,但不能以数字开头: ② 变量的默认类型为字符串类型,如果要对数值运算,则必须指定变量类型为数值型: ③ 变量用等号连接 ...

  4. 『忘了再学』Shell基础 — 11、变量定义的规则和分类

    目录 1.定义变量的规则 2.变量的分类 1.定义变量的规则 在定义变量时,有一些规则需要遵守 变量名称可以由字母.数字和下划线组成,但是不能以数字开头.如果变量名是2name则是错误的. 在Bash ...

  5. shell 将字符串作为变量名并打印

    使用shell的eval实现此功能.代码如下: #!/bin/sh IP9="127.0.0.1" i=9 eval echo \$IP${i} #!/bin/sh WEBIP0= ...

  6. shell基础:环境变量

    子shell是在父shell中打开的shell. 使用pstree查看进程树. $调用环境变量 set查看所有变量内容, env查询环境变量 只是临时改变

  7. shell基础——字符串连接

    #!/bin/sh str1="hello" str2="world" echo str1=$str1, str2=$str2 strconn1=$str1$s ...

  8. shell基础:位置参数变量

    位置参数名称,作用不变.变得是传入参数. 抽象问题,大多为年长资格老师少数年轻老师,故而问的技术细节少,抽象理论知识多,比如什么是软件工程,问什么会有软件工程.有事注重的是品质,有的注重出身. 每种都 ...

  9. shell基础:用户自定义变量

随机推荐

  1. 《码出高效 Java开发手册》第六章 数据结构与集合

    码云: https://gitee.com/forxiaoming/JavaBaseCode/blob/master/EasyCoding/src/collection/index.md 6.1 数据 ...

  2. servlet(一):从Sevlet到HttpServlet

    Java Servlet 是运行在 Web 服务器或应用服务器上的程序,它是作为来自 Web 浏览器或其他 HTTP 客户端的请求和 HTTP 服务器上的数据库或应用程序之间的中间层. servlet ...

  3. js静态数据分页展示

    拿vue做示例 首先定义data data() { return { tableData: [], // 当前页的数据,用于给表格展示用的 tableDataAll: [], // 需要拿来分页的总数 ...

  4. springboot项目的重定向和转发

    下面是idea软件创建的项目目录,这里总结了一下转发与重定向的问题,详解如下. 首先解释一下每个文件夹的作用,如果你是用的是idea创建的springboot项目,会在项目创建的一开始resource ...

  5. 涉及到【分页】的table的请求模式

    step:1 点击分页器的内容 trigger事件句柄 (pagination, filters, sorter) => {//或者(page, pageSize)等 this.props.on ...

  6. 2017年5月22日 HTML基础知识(一)

    一.Html 结构 1.1.HTML基本文档格式—<html> 标记 —<html>文档的头部好和主体内容 </html>  根标记 —<head> 文 ...

  7. angularjs -- 路由监听

    前几天,项目在做一个功能时需要在页面切换之前关闭正在执行的函数.尝试了几种方式都不行,最后想到既然angularjs是通过理由切换页面,那就在路由上面做文章吧.AngularJS在路由发生改变时,可以 ...

  8. 如何使用 adb 命令实现自动化测试

    如何使用 adb 命令实现自动化测试 一.前提: 1.打开手机调试模式,确保手机已正常连接电脑,可在电脑上通过adb devices命令查看,结果如下说明连接成功: List of devices a ...

  9. redis 命令行查看修改配置文件项、配置文件说明

    命令行查看修改配置文件项 config get | config set | config rewrite config get requirepass // 获取密码config set requi ...

  10. java变量常量

    1. java 变量遵循先声明,再赋值,后使用的原则. 一个变量可以只声明,不赋值,没有问题(只是这个变量没有实际意义,但完全没有问题).但如果想要使用它,那么就一定要给它赋值,而大多数时候我们又不知 ...