shell基础--字符串和变量的操作
一.统计字符串长度
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基础--字符串和变量的操作的更多相关文章
- shell基础——字符串处理(转载)
Shell的字符串处理 1 得到长度 %x="abcd" #方法一 %expr length $x 4 # 方法二 %echo ${#x} ...
- 『忘了再学』Shell基础 — 21、变量的测试与内容置换
目录 1.什么是变量的测试与内容置换 2.变量的测试与内容置换 3.示例 例1: 例2: 例3: 1.什么是变量的测试与内容置换 我们之前说过,在Shell中,一个变量未定义,和一个变量为空值的输出效 ...
- Linux学习笔记(16)shell基础之Bash变量
1. 用户自定义变量 (1)变量设置规则 ① 变量名称可由字母.数字和下划线组成,但不能以数字开头: ② 变量的默认类型为字符串类型,如果要对数值运算,则必须指定变量类型为数值型: ③ 变量用等号连接 ...
- 『忘了再学』Shell基础 — 11、变量定义的规则和分类
目录 1.定义变量的规则 2.变量的分类 1.定义变量的规则 在定义变量时,有一些规则需要遵守 变量名称可以由字母.数字和下划线组成,但是不能以数字开头.如果变量名是2name则是错误的. 在Bash ...
- shell 将字符串作为变量名并打印
使用shell的eval实现此功能.代码如下: #!/bin/sh IP9="127.0.0.1" i=9 eval echo \$IP${i} #!/bin/sh WEBIP0= ...
- shell基础:环境变量
子shell是在父shell中打开的shell. 使用pstree查看进程树. $调用环境变量 set查看所有变量内容, env查询环境变量 只是临时改变
- shell基础——字符串连接
#!/bin/sh str1="hello" str2="world" echo str1=$str1, str2=$str2 strconn1=$str1$s ...
- shell基础:位置参数变量
位置参数名称,作用不变.变得是传入参数. 抽象问题,大多为年长资格老师少数年轻老师,故而问的技术细节少,抽象理论知识多,比如什么是软件工程,问什么会有软件工程.有事注重的是品质,有的注重出身. 每种都 ...
- shell基础:用户自定义变量
随机推荐
- 《码出高效 Java开发手册》第六章 数据结构与集合
码云: https://gitee.com/forxiaoming/JavaBaseCode/blob/master/EasyCoding/src/collection/index.md 6.1 数据 ...
- servlet(一):从Sevlet到HttpServlet
Java Servlet 是运行在 Web 服务器或应用服务器上的程序,它是作为来自 Web 浏览器或其他 HTTP 客户端的请求和 HTTP 服务器上的数据库或应用程序之间的中间层. servlet ...
- js静态数据分页展示
拿vue做示例 首先定义data data() { return { tableData: [], // 当前页的数据,用于给表格展示用的 tableDataAll: [], // 需要拿来分页的总数 ...
- springboot项目的重定向和转发
下面是idea软件创建的项目目录,这里总结了一下转发与重定向的问题,详解如下. 首先解释一下每个文件夹的作用,如果你是用的是idea创建的springboot项目,会在项目创建的一开始resource ...
- 涉及到【分页】的table的请求模式
step:1 点击分页器的内容 trigger事件句柄 (pagination, filters, sorter) => {//或者(page, pageSize)等 this.props.on ...
- 2017年5月22日 HTML基础知识(一)
一.Html 结构 1.1.HTML基本文档格式—<html> 标记 —<html>文档的头部好和主体内容 </html> 根标记 —<head> 文 ...
- angularjs -- 路由监听
前几天,项目在做一个功能时需要在页面切换之前关闭正在执行的函数.尝试了几种方式都不行,最后想到既然angularjs是通过理由切换页面,那就在路由上面做文章吧.AngularJS在路由发生改变时,可以 ...
- 如何使用 adb 命令实现自动化测试
如何使用 adb 命令实现自动化测试 一.前提: 1.打开手机调试模式,确保手机已正常连接电脑,可在电脑上通过adb devices命令查看,结果如下说明连接成功: List of devices a ...
- redis 命令行查看修改配置文件项、配置文件说明
命令行查看修改配置文件项 config get | config set | config rewrite config get requirepass // 获取密码config set requi ...
- java变量常量
1. java 变量遵循先声明,再赋值,后使用的原则. 一个变量可以只声明,不赋值,没有问题(只是这个变量没有实际意义,但完全没有问题).但如果想要使用它,那么就一定要给它赋值,而大多数时候我们又不知 ...