• 欢迎浏览“String me = Creater\忠实的资深Linux玩家;”,请文明浏览,理性发言,有侵犯你的权益请邮件我(creater@vip.qq.com).
  • 把任何的失败都当作一次尝试,不要自卑;把所有的成功都想成是一种幸运,不要自傲。
  •    5年前 (2013-08-09)  Linux编程问题 |   5 条评论  8 
    文章评分 0 次,平均分 0.0

    对于一些具有特殊意义的操作符号,需要添加反斜线来反转义。比如两个字符串操作:

    expr "test" \< "unix8"
    expr "test" \& "unix8"

    等于与不等于则可以不用转义

    expr "test" = "unix8"
    expr "test" != "unix8"

    整数操作:

    $expr 10 + 10

    20

    $expr 30 / 3

    10

    $expr 30 / 3 / 2

    5 但是由于*号是shell中的通配符,所以需要转义。

    $expr 30 \* 3

    还可以测试一个数是否时整数:

    r=1.1 expr $r + 1 expr: 非整数参数 

    可以看出只能进行整数操作。 注意以上的操作符的前后都需要有空格,否则shell会当作字符来处理。比如:

    r=1.1 expr $r+1 1.1+1 

    上边的测试不好在程序中使用,可以使用下面的方法: 测试最后命令状态,如果为0,证明这是一个数,其他则表明为非数值。

     $value=12 $expr $value + 10 > /dev/null 2>&1
    $echo $?
    0

    这是一个数。

    $value=hello
    $expr $value + 10 > /dev/null 2>&1
    $echo $?
    2

    这是一个非数值字符。

    expr模式匹配
    expr支持正则表达式,如下因为正则表达式中的.代表任意一字符,*代表前面0个或者多个字符,所以.*.*意即任何字符重复0次或多次。:

    value="www.unix8.net"
    expr $value : '.*'
    13

    特别需要注意的时:冒号左右需要有空格。

    提取字串
    当中的5表示从第5个字符开始,6开始长度为6.

    expr substr $value 5 6
    unix8.
    

    下面列出expr的具体用法

    NAME
           expr - evaluate expressions
    
    SYNOPSIS
           expr EXPRESSION
           expr OPTION
    
    DESCRIPTION
           --help display this help and exit
    
           --version
                  output version information and exit
    
           Print the value of EXPRESSION to standard output.  A blank line below separates increasing precedence groups.  EXPRESSION may be:
    
           ARG1 | ARG2
                  ARG1 if it is neither null nor 0, otherwise ARG2
    
           ARG1 & ARG2
                  ARG1 if neither argument is null or 0, otherwise 0
    
           ARG1 < ARG2
                  ARG1 is less than ARG2
    
           ARG1 <= ARG2               ARG1 is less than or equal to ARG2        ARG1 = ARG2               ARG1 is equal to ARG2        ARG1 != ARG2               ARG1 is unequal to ARG2        ARG1 >= ARG2
                  ARG1 is greater than or equal to ARG2
    
           ARG1 > ARG2
                  ARG1 is greater than ARG2
     ARG1 + ARG2
                  arithmetic sum of ARG1 and ARG2
    
           ARG1 - ARG2
                  arithmetic difference of ARG1 and ARG2
    
           ARG1 * ARG2
                  arithmetic product of ARG1 and ARG2
    
           ARG1 / ARG2
                  arithmetic quotient of ARG1 divided by ARG2
    
           ARG1 % ARG2
                  arithmetic remainder of ARG1 divided by ARG2
    
           STRING : REGEXP
                  anchored pattern match of REGEXP in STRING
    
           match STRING REGEXP
                  same as STRING : REGEXP
    
           substr STRING POS LENGTH
                  substring of STRING, POS counted from 1
    
           index STRING CHARS
                  index in STRING where any CHARS is found, or 0
    
           length STRING
                  length of STRING
    
           + TOKEN
                  interpret TOKEN as a string, even if it is a
    
                  keyword like `match' or an operator like `/'
    
           ( EXPRESSION )
                  value of EXPRESSION
     Beware that many operators need to be escaped or quoted for shells.  Comparisons are arithmetic if both ARGs are numbers, else lex‐
           icographical.  Pattern matches return the string matched between \( and \) or null; if \( and \) are not used, they return the num‐
           ber of characters matched or 0.
    
    
     

    除特别注明外,本站所有文章均为String me = "Creater\忠实的资深Linux玩家";原创,转载请注明出处来自http://unix8.net/home.php/2016.html

    关于

    发表评论

    暂无评论

    切换注册

    登录

    忘记密码 ?

    切换登录

    注册

    扫一扫二维码分享