一.统计字符串长度

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. Spring中的Bean的配置形式

    Spring中Bean的配置形式有两种,基于XML文件的方式和基于注解的方式. 1.基于XML文件的方式配置Bean <?xml version="1.0" encoding ...

  2. HDU 2588 GCD------欧拉函数变形

    GCD Time Limit: 2000/1000 MS (Java/Others)    Memory Limit: 32768/32768 K (Java/Others)Total Submiss ...

  3. 一个简单的DLL生成和测试

    DLL文件内容: SKLDll.h #ifndef _SKLDLL_H_#define _SKLDLL_H_ #ifndef DLL_API #define DLL_API extern " ...

  4. Code Signal_练习题_almostIncreasingSequence

    Given a sequence of integers as an array, determine whether it is possible to obtain a strictly incr ...

  5. Spring 配置数据源之一三兄弟

    前期的准备工作,我们是使用的是maven,我们下载节点即可... 节点如下: <dependency> <groupId>org.springframework</gro ...

  6. Hadoop总结

    背景 Hadoop是一个由Apache基金会所开发的分布式系统基础架构.用户可以在不了解分布式底层细节的情况下,开发分布式程序.充分利用集群的威力进行高速运算和存储. Mapreduce1 vs YA ...

  7. CSS深入理解之overflow(HTML/CSS)

    简介 overflow看上去其貌不扬,其中蕴含的知识点还是很多的,有很多鲜为人知的特性表现. overflow基本属性值 1.visible(默认) 2.hidden 3.scroll 4.auto ...

  8. 回归JavaScript基础(九)

    主题:理解对象,创建对象. 小明是一名程序猿,也是一条单身狗!他常常自嘲:每天都会有很多对象,但却没有女朋友! 多么痛的领悟.哈哈,目前比较流行的编程语言都是面向对象的语言(Object-Orient ...

  9. 精华阅读第 12 期 | 最新 App Store 审核指南与10大被拒理由?

    很多时候,我们对技术的追求是没有止境的,我们需要不断的学习,进步,再学习,再进步!本文系移动精英开发俱乐部的第12期文章推荐阅读整理,其中涉及到了 Android 数据库框架,架构设计中的循环引用,同 ...

  10. 使用 Azure 门户创建 Linux 虚拟机

    可以通过 Azure 门户创建 Azure 虚拟机. 此方法提供一个基于浏览器的用户界面,用于创建和配置虚拟机和所有相关的资源. 本快速入门介绍了如何创建虚拟机并在 VM 上安装 webserver. ...