Linuxshell命令中expr
在Linux shell命令中expr虽然不是很起眼,但是它的作⽤是⾮常⼤的!到⽬前为⽌,我个⼈看来最⼤的作⽤就是两个——四则运算和字符串的操作。
先说四则运算,在Shell中四则运算不能简简单单的加减乘除,应该要写如下的格式:
val1=‘val2 - 1`
其中“=”后⾯⽤“`”包住表达式,这个符号在Shell中⼗分有⽤,是Tab键上⾯“~”的原来形式。可以⽤来将很多命令的结果保存到⼀个变量中去。接着就是运算符了,运算符的左右两边必须是空格,否则会出错。
接着是强⼤的字符串操作:
提取指定字符的下标:expr index 内容字符,例如:ind=`expr index "content" "="`
提取字符串的⼦串:expr substr 内容起始位置终点位置,例如:con=`expr substr "content" "1" $ind
----------------------------------------------
expr命令⼀般⽤于整数值,但也可⽤于字符串。⼀般格式为:
expr argument operator argument
expr也是⼀个⼿⼯命令⾏计数器。
$expr 10 + 10
20
$expr 1500 + 900
2500
$expr 30 / 3
10
$expr 30 / 3 / 2
5
(注意运算符左右都有空格,如果没有空格表⽰是字符串连接)
使⽤乘号时,必须⽤反斜线屏蔽其特定含义。因为shell可能会误解显⽰星号的意义。
$expr 30 * 3
90
数值测试
可以⽤expr测试⼀个数。如果试图计算⾮整数,将返回错误。
$rr=1.1
expr rr + 1
expr: non-numeric argument
$rr=2
expr rr + 1
3
(注意:这个例⼦与原⽂不同)
这⾥需要将⼀个值赋予变量(不管其内容如何),进⾏数值运算,并将输出导⼊dev/null,
然后测试最后命令状态,如果为0,证明这是⼀个数,其他则表明为⾮数值。
$value=12
expr value + 10 > /dev/null 2>&1
echo ?
这是⼀个数。
$value=hello
expr value + 10 > /dev/null 2>&1
echo ?
2
这是⼀个⾮数值字符。
expr也可以返回其本⾝的退出状态,不幸的是返回值与系统最后退出命令刚好相反,成
功返回1,任何其他值为⽆效或错误。下⾯的例⼦测试两个字符串是否相等,这⾥字符串为
“hello”和“hello”。
$value=hello
expr value = "hello"
1
echo ?
expr返回1。不要混淆了,这表明成功。现在检验其最后退出状态,返回0表⽰测试成功,
“hello”确实等于“hello”。
模式匹配
expr也有模式匹配功能。可以使⽤expr通过指定冒号选项计算字符串中字符数。.*意即任
何字符重复0次或多次。
$value=accounts.doc
expr value : '.*'
12
在expr中可以使⽤字符串匹配操作,这⾥使⽤模式. d o c抽取⽂件附属名。
expr value : '(.*).doc'
accounts
shell 中数组
⽤
$varname[0]=value1
$varname[1]=value2
....
来定义
⽤
echo {varname[0]}
⽅式来引⽤
linux字符串转数组从位置处抓取字串
shell>> expr substr "this is a test" 3 5
is is
数字串 only the first character
shell>> expr index "testforthegame" e
2
字串真实重现
shell>> expr quote thisisatestformela
thisisatestformela
-----------------------------------------------
expr命令是⼀个⼿⼯命令⾏计数器,⽤于在UNIX/LINUX下求表达式变量的值,⼀般⽤于整数值,也可⽤于字符串。–格式为:
expr Expression(命令读⼊Expression 参数,计算它的值,然后将结果写⼊到标准输出)
–参数应⽤规则:
⽤空格隔开每个项;
⽤ \ (反斜杠) 放在 shell 特定的字符前⾯;
对包含空格和其他特殊字符的字符串要⽤引号括起来
–expr⽤法实例讲解:
(1)、计算字串长度
[root@kk bkeep]# expr length "bkeep zbb" //包含空格在内
9
(2)、抓取字串
[root@kk bkeep]# expr substr "bkeep zbb" 4 9
ep zbb
(3)、抓取第⼀个字符数字串出现的位置
[root@kk bkeep]# expr index "bkeep zbb" e
3
(4)、整数运算
[root@kk bkeep]# expr 14 % 9
5
[root@kk bkeep]# expr 30 / 3 / 2 //运算符与数字间⼀定要有空格
5
(5)、增量计数
说明:expr在循环中⽤于增量计算。先将变量初始化为0,然后循环值加1,反引号的⽤法为命令替代。> LOOP=0
> LOOP=`expr $LOOP + 1`
(6)、数值测试
说明:⽤expr测试⼀个数。如果试图计算⾮整数,则会返回错误。
> rr=3.4
> expr $rr + 1
expr: non-numeric argument
> rr=5
> expr $rr + 1
6
(7)、模式匹配
说明:expr也有模式匹配功能。可以使⽤expr通过指定冒号选项计算字符串中字符数。
.* 意即任何字符重复0次或多次。
[root@kk bkeep]# expr bkeep.doc : '.*'
9
(8)在expr中可以使⽤字符串匹配操作,这⾥使⽤模式抽取.doc⽂件附属名。
[root@kk bkeep]# expr bkeep.doc : '.*.doc'
bkeep
Loading [MathJax]/jax/element/mml/optable/BasicLatin.js
版权声明:本站内容均来自互联网,仅供演示用,请勿用于商业和其他非法用途。如果侵犯了您的权益请与我们联系QQ:729038198,我们将在24小时内删除。
发表评论