码迷,mamicode.com
首页 > 其他好文 > 详细

变量(续)

时间:2015-06-05 00:50:38      阅读:109      评论:0      收藏:0      [点我收藏+]

标签:default   字符串   style   

  1. 本篇主要通过例子陈述两个方面的问题①通过模式处理变量字符串②变量定义的几种特殊形式

  2. 通过模式处理变量字符串

首先设实验变量为lqx,暂时初值为liuliancao

[root@www ~]# lqx="liuliancao"
[root@www ~]# echo $lqx

liuliancao

eg1.1  位置裁剪${variable:first:length(default to end)}

指定位置裁剪,一直到结尾

[root@www ~]# echo ${lqx:3}
liancao
[root@www ~]# echo ${lqx:2}
uliancao

指定位置裁剪,裁剪几个字符,如果想要第2-4字符的话,其中1表示从第二个字符开始,默认从0,3表示3个字符

[root@www ~]# echo ${lqx:1:3}
iul

eg1.2模式裁剪${variable#word} 注意中间没有空格

从字符串开头,开始模式匹配,匹配到的都会被裁剪,留下剩下的,用#表示非贪婪模式(最短模式),通常可以和*使用表示任意字符串

[root@www ~]# echo ${lqx#liu}
liancao
[root@www ~]# echo ${lqx#*i}
uliancao

贪婪模式,直觉性地想,写两个#,学过正则的估计知道,贪婪模式,是最大程度匹配

[root@www ~]# echo ${lqx##*i}

ancao

从尾部,我们使用%,贪婪模式double,这里提醒下,当我们%的时候,怎么写模式呢,从正面写哦,所以写的是a*而不是*a.这句话请仔细体会,并尝试。

从后往前找,尽可能离后面的位置最远的符合模式的全部截掉

[root@www ~]# echo ${lqx%%a*}

liuli

从后往前找,第一个即可

[root@www ~]# echo ${lqx%a*}
liulianc


再举个例子,也为了等会的脚本服务

[root@www ~]# tel="0518-777-123-234"

取区号,从前面取的话,必然不行,前面的正是我们需要的,所以从后面取,一直取到最远的连字符

所以

[root@www ~]# echo ${tel%%-*}
0518

那么取得后面的号码呢,非贪婪模式,到-结束,对吧

[root@www ~]# echo ${tel#*-}
777-123-234


下面写一个根据URL获取域名的一个脚本程序,主要是是否使用贪婪模式,一定要想清楚

分析下思路

一个URL通常由下面的基本格式组成

protocol://host:port/path/index.php?id=1(action)

分析下,必须从后面截取,因为目录也会用到/,而前面的内容是相对的

①先非贪婪截断前面的第一个//然后再从后面截取最后一个看到的/(也即贪婪),然后如果有冒号从后面截取:(非贪婪贪婪无所谓)

[root@www shell]# cat url.sh
#!/bin/bash
#asume that $1 is the URL,and i will find the host
_url=$1
echo "orignal url: $_url"
#1 reduce protocol
_url=${_url#*://}
echo " url without protocol: $_url"
#2 reduce behind
_url=${_url%%/*}
echo " url without pro and path: $_url"
#3 reduce port
_url=${_url%:*}
echo " final host: $_url"

运行结果为

[root@www shell]# ./url.sh  http://www.liuliancao.com:8080/index.php?id=1

orignal url: http://www.liuliancao.com:8080/index.php?id=1

url without protocol: www.liuliancao.com:8080/index.php?id=1

url without pro and path: www.liuliancao.com:8080

final host: www.liuliancao.com



  1. 变量定义的几种特殊形式

<td vAlign="middle" style="padding-top: 5px; padding-left: 4px; padding-botto

形式

说明

${var}

变量本来的值

${var:-word}

如果变量 var 为空或已被删除(unset),那么返回word,但不改变var 的值。

${var:=word}

如果变量 var 为空或已被删除(unset),那么返回 word,并将 var 的值设置为 word

${var:?message}


变量(续)

标签:default   字符串   style   

原文地址:http://qixue.blog.51cto.com/7213178/1658680

(0)
(0)
   
举报
评论 一句话评论(0
登录后才能评论!
© 2014 mamicode.com 版权所有  联系我们:gaon5@hotmail.com
迷上了代码!