黑狼linux第三期shell中的let与expr计算技巧
eggic.com
视频下载地址
#
shell中的let与expr计算技巧
[~]# let "abc = 1 + 1"
[~]# echo $abc
2
[~]# expr "1+1"
1+1
[~]# expr "1 + 1"
1 + 1
[~]# expr "a=1 + 1"
a=1 + 1
[~]# expr 1 + 1
2
let运算时要加一个引号把运算部分引起来
expr不用加引号就可以直接运算出结果
i=$(( i + 1 ))
名称:expr
使用权限:所有使用者
### 字串长度
shell>> expr length "this is a test"
14
### 数字商数
shell>> expr 14 % 9
5
### 从位置处抓取字串
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 shell下的四则运算:
* 乘; /除; % 求余数; +,- 如:expr (3+3)*(4-2)
command1 && command2 如果第一个命令执行成功,则运行第二个命令;
command1 || command2 如果第一个命令执行失败,则运行第二个命令;
e x p r命令一般用于整数值,但也可用于字符串。
使用乘号时,必须用反斜线屏蔽其特定含义。因为 s h e l l可能会误解显示星号的意义。
增量计数
e x p r在循环中用于增量计算。首先,循环初始化为 0,然后循环值加1,反引号的用法意
替代命令。最基本的一种是从(e x p r)命令接受输出并将之放入循环变量。
loop=0
loop=`expr $loop + 1`
数值测试
可以用e x p r测试一个数。如果试图计算非整数,将返回错误
expr rr + 1
expr: non-numeric argument
这里需要将一个值赋予变量(不管其内容如何) ,进行数值运算,并将输出导入 d e v / n u l l,
然后测试最后命令状态,如果为0,证明这是一个数,其他则表明为非数值。
omu0:~ # VALUE=12
omu0:~ # expr $VALUE + 10 > /dev/null 2>&1
omu0:~ # echo $?
0
这是一个数。
omu0:~ # VALUE=hello
omu0:~ # expr $VALUE + 10 > /dev/null 2>&1
omu0:~ # echo $?
2
这是一个非数值字符。
e x p r也可以返回其本身的退出状态,不幸的是返回值与系统最后退出命令刚好相反,成
功返回1,任何其他值为无效或错误。下面的例子测试两个字符串是否相等,这里字符串为
“h e l l o”和“h e l l o” 。
omu0:~ # VALUE=hello
omu0:~ # expr $VALUE = "hello"
1
omu0:~ # echo $?
0
omu0:~ #
e x p r返回1。不要混淆了,这表明成功。现在检验其最后退出状态,返回 0表示测试成功,
“h e l l o”确实等于“h e l l o” 。
e x p r也有模式匹配功能。可以使用 e x p r通过指定冒号选项计算字符串中字符数。 . *意即任
何字符重复0次或多次。
omu0:~ # VALUE=accounts.doc
omu0:~ # expr $VALUE : 0ctober 8, '.*'
12
在e x p r中可以使用字符串匹配操作,这里使用模式 . d o c抽取文件附属名。
omu0:~ # expr $VALUE : '\(.*\).doc'
accounts
本章涉及e x p r和t e s t基本功能,讲到了怎样进行文件状态测试和字符串赋值,使用其他的
条件表达式如if then else和c a s e可以进行更广范围的测试及对测试结果采取一些动作。
阅读(2894) | 评论(0) | 转发(0) |