Unix中选择合适的字符串处理方式

在Unix操作系统中 , 说实话其字符串的处理功能实在不强 。如没有现成的length(获取字符串的长度)等函数 。要实现对字符串的操作 , 往往需要采用expr命令结合相关的通配符来实现一些特定的功能 。虽然在Unix操作系统中 , 对于字符串的操作比较麻烦 。但是系统工程师只要知道各种处理方式特点与缺点 , 那么对症下药 , 仍然可以找到一些简单的方式来处理系统中的字符串问题 。
【Unix中选择合适的字符串处理方式】一、对用户输入的字符串长度进行验证 。
系统工程师有时候往往需要对用户输入的字符串长度进行验证 。如在设计一个登陆程序时 , 为了安全起见 , 可能需要限制用户密码输入的最小位数 , 如必须是六位以上的密码等等 。此时 , 其实就是统计用户输入的字符串长度问题 。如果用户输入的密码长度不够 , 就提醒用户;如果够的话 , 就直接保存用户输入的信息 。所以 , 简单的说这可以利用if语句或者while循环判断语句来实现 。而这个条件则可以利用expr关键字来实现 。
如果用判断用户输入的字符串长度 , 可以利用如下的格式来写 。Expr “$userpasswd : ’.*’ 即可 。在编写这个命令时 , 需要注意一些基本的规则 。如这个expr命令往往需要使用两个表达式 , 而且中间需要使用英文状态小的冒号进行分割 。而且这个两个表达式的顺序也有严格的限制 。冒号左边是需要处理的字符串(需要统计长度的字符串或者变量) , 而冒号右边则是普通的正则表达式 。其次 , 需要处理的字符串需要使用双引号括起来 。这里跟普通命令中字符串的处理方式有所不同 。在普通的命令中 , 变量不需要使用双引号因起来 。如果引起起来的话 , 则系统反而会将其当作常量来处理 。但是如果在if条件语句中将利用这个命令来统计字符串长度时 , 则需要将变量使用双引号引起来 。这个字符串处理上的差异需要注意 , 不少系统工程师在这里吃过亏 。第三 , 有时候正则表达式也需要利用单引号来引起来 。如上面的’.*’则表示所有匹配的字符 。如果不使用单引号的话 , 系统可能会提示语法错误 。
二、截取字符串 。
有时候系统管理员需要截取字符串的自串来完成特定的任务 。如现在系统工程师需要对某个文件根据系统的时间来进行命名 , 其命名的规则为年份(最后两位)加月份的形式 , 即0906表示这个文件是09年6月份创建的 。因为每个月创建一个独立的日志文件 , 为此按这个格式对其进行命名算是比较合理的 。但是在系统中实现起来有一定的困难 。然后通过date命令加上一些可选项参数可以截取日期的年份、月份等信息 。可是利用date命令截取的年份是四位数字(如2009) , 而不是两位数字 。这跟系统工程师的需求还有一定的距离 。那么如果一定要采用年份的两位数字来对文件或者文件夹进行命名 , 该如何处理呢?
此时就需要用到expr命令的另一个功能 , 即截取字符串的功能 。一般来说 , expr命令主要有三个功能 , 分别为求字符串的长度、截取字符子串、求一个字符在一个字符串中的位置 。当然如果这些功能跟其他命令结合使用的话 , 可以实现一些比较复杂的需求 。在Unix系统中 , 如果需要截取字符串的话 , 笔者首先建议的是采用一些自带的命令 。如date %w则表示显示今天星期几 。虽然expr命令也可以实现类似的功能 , 但是初期起来比较麻烦 。为此对于截取字符串笔者建议 , 能够使用系统自带功能来实现的 , 那么就使用系统自带的命令 。如果没有的话 , 那么就只有用过expr命令来实现 。也就是说 , expr 是一个通用的命令 , 所有的字符串截取工作其都可以完成 。只是代码书写起来没有那些系统自带命令那么简单 。如果现在系统工程师需要截取年份的后两位数字 , 此时该如何处理呢?在系统转义字符的帮助下 , 可以完成这个功能 。如下所示:

推荐阅读