当前位置:  操作系统/服务器>linux

shell字符串操作详解

    来源: 互联网  发布时间:2014-10-15

    本文导语:  1、shell变量声明的判断 表达式 含义 ${var} 变量var的值, 与$var相同 ${var-DEFAULT} 如果var没有被声明, 那么就以$DEFAULT作为其值 * ${var:-DEFAULT} 如果var没有被声明, 或者其值为空, 那么就以$DEFAULT作为其值 * ${var=DEFAULT} 如果var...

1、shell变量声明的判断

表达式 含义 ${var} 变量var的值, 与$var相同 ${var-DEFAULT} 如果var没有被声明, 那么就以$DEFAULT作为其值 * ${var:-DEFAULT} 如果var没有被声明, 或者其值为空, 那么就以$DEFAULT作为其值 * ${var=DEFAULT} 如果var没有被声明, 那么就以$DEFAULT作为其值 * ${var:=DEFAULT} 如果var没有被声明, 或者其值为空, 那么就以$DEFAULT作为其值 * ${var+OTHER} 如果var声明了, 那么其值就是$OTHER, 否则就为null字符串 ${var:+OTHER} 如果var被设置了, 那么其值就是$OTHER, 否则就为null字符串 ${var?ERR_MSG} 如果var没被声明, 那么就打印$ERR_MSG * ${var:?ERR_MSG} 如果var没被设置, 那么就打印$ERR_MSG * ${!varprefix*} 匹配之前所有以varprefix开头进行声明的变量 ${!varprefix@} 匹配之前所有以varprefix开头进行声明的变量

* 很简单,大家试试就明白了,不多说,注意美元符号与左花括号之间不能存在空格,左花括号不能与变量名间存在空格,变量名不能与判断符合间有空格。

2、字符串操作(长度获取,读取,匹配删除,替换)

表达式 含义 ${#string} $string的长度 ${string:position} 在$string中, 从位置$position开始提取子串 ${string:position:length} 在$string中, 从位置$position开始提取长度为$length的子串 ${string#substring} 从变量$string的开头, 删除最短匹配$substring的子串 ${string##substring} 从变量$string的开头, 删除最长匹配$substring的子串 ${string%substring} 从变量$string的结尾, 删除最短匹配$substring的子串 ${string%%substring} 从变量$string的结尾, 删除最长匹配$substring的子串 ${string/substring/replacement} 使用$replacement, 来代替第一个匹配的$substring ${string//substring/replacement} 使用$replacement, 代替所有匹配的$substring ${string/#substring/replacement} 如果$string的前缀匹配$substring, 那么就用$replacement来代替匹配到的$substring ${string/%substring/replacement} 如果$string的后缀匹配$substring, 那么就用$replacement来代替匹配到的$substring

* 需要说明的是substring可以是正则表达式。

可替代命令:cut sed awk ,这三个是更为强大的字符串处理命令,能干关于字符串的非常多事情。这里有很多样例介绍。

3、性能比较
time for i in $(seq 10000);do a=${#test};done;
time for i in $(seq 10000);do a=$(expr length $test);done;

代码如下:

real 0m0.181s
user 0m0.170s
sys 0m0.000s

real 0m8.580s
user 0m2.497s
sys 0m6.075s


这里相当于循环调用awk、sed、cut、length等外部命令处理字符串,耗时是理所当然的。之前有篇说过shell优化问题,这里不再赘述,shell循环比awk慢非常多,这里的性能测试其实不太有实际意义,具体原因结合shell优化那篇看。

4、 字符串正则判断
可以类似使用如下命令:

代码如下:

if [[ "${lastday?ERR_MSG}" =~ "^[0-9]{4,4}-[0-9]{2,2}-[0-9]{2,2}$" ]]
then
...
fi


据说需要在bash版本3.0以上才能使用,查看bash版本方法为:bash -version ,查看当前解释器种类命令:echo $0

    
 
 

您可能感兴趣的文章:

  • 使用shell在文本文件中进行字符串搜索问题?shell高手请进,分不够可以再加
  • shell程序:在大文件中查找特定字符串,但该字符串可以跨行
  • 如何用shell实现将指定文件中的指定的字符串替换为我指定的另外的字符串
  • shell 中如何传字符串参数?
  • shell怎么搜索文件中指定字符串,然后将该字符串后面的数字输出
  • shell函数如何返回字符串
  • shell里按照位置截取字符串变量
  • shell如何取一个字符串中最右边的三个字符?
  • shell如何去掉字符串中的一些字符?
  • 请教一个简单的shell字符串拼接问题
  • shell 字符串赋值
  • shell脚本里面,用什么指令删除字符串中子串
  • 关于使用shell在文件中查找一段字符串的问题
  • shell如何只替换字符串的第一个字符?
  • 问一个简单的shell问题:如何将一个文件中的字符串A全部用另外一个字符串B替换?
  • shell字符串替换,达人进
  • shell中如何进行字符串的运算???
  • 在linux下写一个shell:if(字符串1==“”(空) 或字符串2====“”(空))怎马写啊,急
  • 如何用shell做字符串的替换
  • linux如何向后台终端shell当前光标处送入字符串
  • shell去掉文件中空行(空白行)的方法详解
  • shell脚本中常见的一些特殊符号和作用详解
  • linux shell脚本学习xargs命令使用详解
  • Android执行shell命令详解
  • linux shell命令行选项与参数用法详解
  • linux shell命令行参数用法详解
  • 用shell脚本防ssh和vsftpd暴力破解的详解讲解
  • Linux base shell重定向详解
  • shell 基本计算、逻辑运算、位运算详解
  • hbase shell基础和常用命令详解
  • 基于C语言实现shell指令的详解
  •  
    本站(WWW.)旨在分享和传播互联网科技相关的资讯和技术,将尽最大努力为读者提供更好的信息聚合和浏览方式。
    本站(WWW.)站内文章除注明原创外,均为转载、整理或搜集自网络。欢迎任何形式的转载,转载请注明出处。












  • 相关文章推荐
  • linux bash shell命令:文本搜索工具grep中用于egrep和 grep -E的元字符扩展集
  • 急问bash shell中替换字符串中某字符为通配符的问题。
  • linux bash shell命令:文本搜索工具grep正则表达式元字符集(基本集)
  • 谁知道Kernel driver怎么发送字符到shell运行吗?
  • linux shell 中# 字符当成注释?
  • 请问在shell如何实现字符串子串运算
  • 请教一个shell中字符和数值的问题。
  • bash shell 如何实现删除文件中的各行字符呢?
  • shell下,如何输出特殊字符?
  • shell中字符串的替换操作
  • shell中如何比较 路径 字符串?
  • linux shell编程 如何把命令返回值赋给字符串
  • 怎么用shell把文件名中一些字符去掉
  • shell 字符串通配
  • shell编程字符串问题
  • shell中处理字符
  • shell下面如何获取某个关键字后面的6位字符?
  • shell 对字符串进行正则操作
  • perl/shell 字符问题
  • linux的shell删除文件中100行的,每行的前6个字符的问题?
  • shell,如何遍历出指定位置包含指定字符串的文件名?
  • Centos6下安装Shell下文件上传下载rz,sz命令
  • 不同类型的shell*(K SHELL , C SHELL) 用命令怎么切换?
  • linux bash shell命令:grep文本搜索工具简介
  • 我在执行shell时,想在shell里直接向mysql数据库插入数据,我该如何写shell。
  • Linux下指定运行时加载动态库路径及shell下执行程序默认路径
  • 菜鸟问问题:shell是什么呢?普通的ls、cp、pwd这些命令算不算shell呢?如何把自己写的文件变成shell呢?
  • linux bash shell命令:文本搜索工具Grep命令选项及实例
  • 傻瓜问题,请问shell编程和shell脚本编程的关系
  • shell变量和子shell的问题请教
  • 请问“当前shell”和“子shell”的区别?


  • 站内导航:


    特别声明:169IT网站部分信息来自互联网,如果侵犯您的权利,请及时告知,本站将立即删除!

    ©2012-2021,,E-mail:www_#163.com(请将#改为@)

    浙ICP备11055608号-3