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基础:用户自定义变量
随机推荐
- [javaSE] 集合框架(TreeSet)
TreeSet:可以对Set集合中的元素排序,默认按照ascii表排序,二叉树结构 左边叉是小的,右边叉是大的 存储自定义对象 定义一个类Student实现Comparable类,使自定义类具备比较性 ...
- Java多线程学习之线程的取消与中断机制
任务和线程的启动很容易.在大多数情况下我们都会让他们运行直到结束,或是让他们自行停止.但是,有时我们希望提前结束任务或是线程,可能是因为用户请求取消,或是线程在规定时间内没有结束,或是出现了一些问题迫 ...
- 深入理解java虚拟机---java内存区域与内存溢出异常---1内存结构
本文来源于翁舒航的博客,点击即可跳转原文观看!!!(被转载或者拷贝走的内容可能缺失图片.视频等原文的内容) 若网站将链接屏蔽,可直接拷贝原文链接到地址栏跳转观看,原文链接:https://www.cn ...
- fzu 2154 YesOrNo
Problem 2154 YesOrNo Accept: 14 Submit: 29Time Limit: 1000 mSec Memory Limit : 32768 KB Proble ...
- 二进制GCD算法 减少%的时间消耗
/* 二进制求最大公约数.由于传统的GCD,使用了%,在计算机运行过程中要花费大量的时间,所以,采取二进制的求法,来减少时间的消耗. 算法: 当a,b都是偶数时: gcd(a,b)=2*gcd(a/2 ...
- php判断是否isPhone、is_weixin
protected function isPhone(){ $agent = strtolower($_SERVER['HTTP_USER_AGENT']); //pc请求头信息数组 $pc_arr= ...
- 微信开发e.target.dataset取值undefined
替换为: e.currentTarget.dataset.current
- 浅谈脚本化css(一)
读写css属性 每一个dom元素都有一个属性style,dom.style里面存放的这个元素的行间样式,我们可以通过这个属性来读写元素的行间样式. 注意: 1.我们碰到float这样的关键字属性的时候 ...
- mysql 的varchar类型小记
参考链接:MySQL的varchar长度问题 今天用mysql做一个demo,创建了个表: -- 借款表 CREATE TABLE jk ( id ) NOT NULL auto_increment, ...
- 【vue】vue的路由权限管理
前言: 最近闲来无事浏览各种博客,看到了一个关于路由权限的管理,觉得很有用,针对那个博客,准备自己写一个demo. 实现: 路由大致分为用户路由<特定用户才能浏览>和基本路由<所有用 ...