一.统计字符串长度

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. 中小型研发团队架构实践七:集中式日志ELK

    一.集中式日志 日志可分为系统日志.应用日志以及业务日志,系统日志给运维人员使用,应用日志给研发人员使用,业务日志给业务操作人员使用.我们这里主要讲解应用日志,通过应用日志来了解应用的信息和状态,以及 ...

  2. python学习之老男孩python全栈第九期_数据库day003知识点总结 —— MySQL数据库day3

    复习: 1. 增 insert into xx(name) values('root'),('xxx'); insert into xx(name) select id from tb1; 2. 自增 ...

  3. html中内联元素和块元素的区别、用法以及联系

    昨天用asp.net的BulletedList做一个导航栏,最终该控件形成的html代码是ul列表和a超链接,具体代码如下: <ul id="BulletedList1" s ...

  4. BZOJ3524: [Poi2014]Couriers(主席树)

    题意 题目链接 Sol 严格众数只会出现一次,那么建出主席树,维护子树siz,直接在树上二分即可 #include<bits/stdc++.h> #define LL long long ...

  5. js-权威指南学习笔记7

    第七章 数组 1.数组直接量的语法允许有可选的结尾的逗号,所以[ , , ]只有两个元素而非三个. 2.调用构造函数Array()创建数组时,传入一个参数时表示指定数组的长度. 3.所有的索引都是属性 ...

  6. react 中使用定时器 Timers(定时器)

    setTimeout,clearTmeout setInterval,clearInterval 在 class 中 class TimersDemo extends Component { cons ...

  7. JSP用户登录页面

    <%@ page language="java" contentType="text/html; charset=UTF-8" pageEncoding= ...

  8. 创建完美SDK的10个技巧

    [编者按]本文作者为 Gal Lavinsky,文中将列出10个零基础小技巧,帮你创建完美的Java SDK.文章系国内 ITOM 管理平台 OneAPM 编译呈现.以下为正文. 本文起源于笔者朋友的 ...

  9. Docker 网络基础介绍

    [编者按]本文作者为 Mesosphere 开发大使 Michael Hausenblas,主要介绍配置 Docker 单主机网络的基本知识.文章系国内 ITOM 管理平台 OneAPM 编译呈现. ...

  10. AIX用裸设备给表空间添加数据文件

    近期在对生产数据库表空间进行扩容,目的是春节期间保证表空间的使用率,不会出现紧急告警信息. 1.查看表空间使用率的SQL语句 col tablespace_name for a16 col SUM_S ...