(033) Linux之字符串和数字

十年运维系列之基础篇 - Linux

作者:曾林 

联系:[email protected]

网站:www.jplatformx.com

版权:文章未经同意请勿转载


一、引言

  计算机程序其实就是处理数据。前面的章节主要从文件层面讲解了数据的处理。然而,很多编程问题需要用到更小的数据单元,例如字符串和数字来解决。

  本章将学习几个用于操作字符串和数字的shell脚本特性。shell还提供了多种字符串操作的参数扩展。

 

二、参数扩展

  虽然以前的章节中谈论过参数扩展,但是因为绝大部分的参数扩展使用在脚本文件而不是在命令行,所以我们未加详细解释,在这之前已经使用了某些形式的参数扩展,例如shell变量。shell提供了多种参数的扩展形式。

 

1. 基本参数

  参数扩展的最简单形式体现在平常对变量的使用中。举例来说,$a扩展后成为变量a所包含的内容,无论a包含什么。简单参数也可以被花括号包围,例如${a}。这对扩展本身毫无影响。但是,当变量相邻于其他文本时,则必须使用括号,否则可能让shell混淆。看下面的例子,我们试图以附加字符串_file到变量a内容后的方式新建一个文件名。

技术分享

  同样可见,大于9的位置参数可以通过给相应数字加上括号来访问。例如访问到第11个位置参数,可以这样做——${11}。

 

2. 空变量扩展的管理

  有的参数扩展用于处理不存在的变量和空变量。这些参数扩展在处理缺失的位置参数和给参数赋默认值时很有用处。这种参数扩展形式如下。

${parameter:-word}

  如果parameter未被设定(比如不存在)或者是空参数,则其扩展为word的值;如果parameter非空,则扩展为parameter的值。执行如下图所示:

技术分享

  以下是另外一种扩展形式,在里面使用等号,而非连字符号。

${parameter:=word}

  如果parameter未被设定或者为空,则其扩展为word的值;此外,word的值也将赋给parameter。如果parameter非空,则扩展为parameter的值。

技术分享

  需要注意一点的是,使用“=”而不是连字符“-”的话,这样的方式不能应用于位置参数和其他特殊参数。如下图所示:

技术分享

  我们还可以使用问号,如下表示:

${parameter:?word}

  如果parameter未设置或者为空的话,这样扩展会致使脚本出错而退出,并且word内容输出到标准错误。如果parameter非空,则扩展结果为parameter的值。具体如下图:

技术分享

  如果我们使用一个加号,如下所示:

${parameter:+word}

  若parameter未设定或者为空,将不产生任何的扩展。若parameter非空,word的值将取代parameter的值;然而,parameter的值并不发生变化。

技术分享

 

 

  

郑重声明:本站内容如果来自互联网及其他传播媒体,其版权均属原媒体及文章作者所有。转载目的在于传递更多信息及用于网络分享,并不代表本站赞同其观点和对其真实性负责,也不构成任何其他建议。