一.统计字符串长度

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基础之基础语法详录

    [前言] java的语法先从基础语法学,Java语言是由类和对象组成的,其对象和类又是由方法和变量组成,而方法,又包含了语句和表达式. 对象:(几乎)一切都是对象,比如:一只熊猫,他的外观,颜色,他在 ...

  2. Idea生成Javadoc

    Idea tools菜单下:Generate Javadoc...,在弹出的对话框中选择指定的包或文件,也可滤掉指定的包或文件.如果有自定义的javadoc标签,则需要在other command l ...

  3. HNCU专题训练_线段树(2)

    1.统计颜色,或运算的运用2.区间第k大数3.一个很经典的题5.求区间相等数字的个数6.RMQ模板题,区间最大值和最小值的差 1.很好的思路,用或运算来避免左右儿子树总相同颜色的情况.由于T颜色种类最 ...

  4. [移动端WEB] 移动端input标签按钮为什么在苹果手机上还有一层白色?

    移动端input标签按钮为什么在苹果手机上还有一层白色? 解决办法:其实蛮简单的,就加一个属性就好了 input { outline:0px ; -webkit-appearance: none; } ...

  5. HBuilder开发App Step1——环境搭建,HelloMUI 以及真机调试

    No1. 必须搭建java环境 只需要最基础的java环境,也就是cmd下可以运行java和javac即可, 具体教程请自行百度,都会有很详细的教程,这里不重点介绍. No2. 下载安装HBuilde ...

  6. linux rpm之已安装包校验、rpm包中文件提取

    已安装包校验 rpm -V 已安装的包名-V 校验指定rpm包中的文件 rpm -V pth没有任何提示,说明自安装后没有做过任何修改 rpm包中文件提取 比如对一个系统配置文件误操作,可以根据这个文 ...

  7. 如何在微软Windows平台上打造出你的Linux开发环境(转载)

    如何在微软Windows平台上打造出你的Linux开发环境 投递人 itwriter 发布于 2013-12-10 11:18 评论(1) 有348人阅读  原文链接  [收藏]  « » 英文原文: ...

  8. 【Java】得到当前股票信息

    import java.io.BufferedReader; import java.io.InputStreamReader; import java.net.HttpURLConnection; ...

  9. map合并,相同键对应的值相加

    最近在做统计钱的计算时遇到的一个需求,需要将一个大类别下的每一种钱进行特定的运算然后获得六年的钱,最后将这些钱按照年份进行汇总,获得总得大类型的六年的钱,在这个过程中采用了这种方法,每次算得钱放在ma ...

  10. Object、T(以下代指泛型)、?的区别

    因为最近看了很多项目底层都使用了T,?泛型,于是百度了一下有如下理解 我们先来试着理解一下Object类,学习Java的应该都知道Object是所有类的父类,注意:那么这就意味着它的范围非常广!首先记 ...