shell中let 命令与Expr命令介绍

来源:互联网 发布:流动人口大数据 编辑:程序博客网 时间:2024/05/17 01:08

let 命令介绍:

Let命令让BASH shell执行算数运算的操作,使用let,可以比较两运算数值或者执行加减乘除等运算操作,这种操作往往用于shell程序中的流程控制结构或者执行需要的运算,注意let只能执行整数的相关操作,运算结果也只能保存整数。

使用方法如下:

let 变量名 = 变量1 运算符 变量2

 

常见的算数操作分类:

加法:+

减法:-

除法:/

乘法:*

取余数:%

 

Let命令使用方法举例:

注意:和c语言类似,;let i=$i+1可以写成let i++来简化书写

Shell实例1:

[root@ChangerLee 运算比较符]#cat let_op.sh #!/bin/bash#some examples about let  num1=106num2=10num3=5#oprating let res1=${num1}+${num2}+${num3}let res2=${num1}-${num2}-${num3}let res3=${num1}*${num2}*${num3}let res4=${num1}/${num2}/${num3}let res5=${num1}%${num2}%${num3}#output resultsecho "num1+num2+num3=${res1}"echo "num1-num2-num3=${res2}"echo "num1*num2*num3=${res3}"echo "num1/num2/num3=${res4}"echo "num1%num2%num3=${res5}"[root@ChangerLee 运算比较符]#sh let_op.sh num1+num2+num3=121num1-num2-num3=91num1*num2*num3=5300num1/num2/num3=2num1%num2%num3=1



注意num1/num2/num3得到结果为整数2,说明let只能保留整数结果并将小数部分截取掉

Shell实例2:

[root@ChangerLee 运算比较符]#cat let_op_v1.sh #!/bin/bash# let and while i=10num=1 while [ 1 ]doif [ $num -le $i ]then echo "$num"elsebreakfilet num=$num+1done[root@ChangerLee 运算比较符]#sh let_op_v1.sh 12345678910

Let不适用于小数之间的运算:

Shell实例3:

<span style="font-size:18px;"><strong>[root@ChangerLee 运算比较符]#let 1+1[root@ChangerLee 运算比较符]#let 1.1+1-bash: let: 1.1+1: syntax error: invalid arithmetic operator (error token is ".1+1")</strong></span>


 

Expr命令介绍:

Expr在linux命令中和let功能类似,它作算数运算时,只能进行整数类型的运算,不能保存小数结果。Expr还可以进行字符串之间的运算。

Expr的使用方法如下:

Expr expression1 操作符expression2

操作符必须加’\’用于转义,并且操作符和两个expression之间必须有空格(这一点与let不同)且Expr 不适合小数的运算。

常见的算数操作分类:

加法:+

减法:-

乘法:*

除法:/

取余数:%

Expr使用方法举例:

(1)执行常用的算数运算操作:

Shell实例4:

[root@ChangerLee 运算比较符]#cat expr_op_v1.sh #!/bin/bash#an exmple of expr num1=56num2=10num3=5echo "num1:$num1  num2:$num2  num3:$num3"#operating numres1=`expr $num1 \+ $num2 \+ $num3`res2=`expr $num1 \- $num2 \- $num3`res3=`expr $num1 \* $num2 \* $num3`res4=`expr $num1 \/ $num2 \/ $num3`res5=`expr $num1 \% $num2 \% $num3`#output resultsecho "num1+num2+num3=$res1"echo "num1-num2-num3=$res2"echo "num1*num2*num3=$res3"echo "num1/num2/num3=$res4"echo "num1%num2%num3=$res5"[root@ChangerLee 运算比较符]#sh expr_op_v1.shnum1:56  num2:10  num3:5num1+num2+num3=71num1-num2-num3=41num1*num2*num3=2800num1/num2/num3=1num1%num2%num3=1

</pre><p><strong><span style="font-family:Microsoft YaHei;font-size:18px;">Shell实例5:</span></strong></p><p><strong><span style="font-family:Microsoft YaHei;font-size:18px;"></span></strong></p><pre name="code" class="html">[root@ChangerLee 运算比较符]#cat expr_op_v2.sh #!/bin/bash# let and while i=10num=1 while [ 1 ]doif [ $num -le $i ]then echo "$num"elsebreakfinum=`expr $num \+ 1`done[root@ChangerLee 运算比较符]#sh expr_op_v2.sh 12345678910 



Shell实例6:

[root@ChangerLee 运算比较符]#expr 1 \+ 12[root@ChangerLee 运算比较符]#expr 1.1 \+ 1expr: non-integer argument


(2)执行常用的字符串操作

1.输出字符串的长度

<strong><span style="font-size:18px;">[root@ChangerLee 运算比较符]#cat expr_str.sh #!/bin/bash#output length str str1="this str length is 21"str2="blog.csdn.net/changerjjlee" echo '${#str1}'${#str1}expr length $str2[root@ChangerLee 运算比较符]#sh expr_str.sh ${#str1}2126</span></strong>



注意:expr只能输出不含有空格的字符串

2.取字串的操作

expr substr $string $postion $length 位置编号从1开始

echo ${$string:$postion:$length}位置编号从0开始

Shell实例7:

[root@ChangerLee 运算比较符]#string="abcdefghi"[root@ChangerLee 运算比较符]#expr substr $string 1 3abc[root@ChangerLee 运算比较符]#echo ${string:0:3}abc



(3)字符串连接的操作

Shell实例8:

<strong>[root@ChangerLee 运算比较符]#cat con_str_v1.sh #!/bin/bash#connection of strings str1="abc"str2="def ghi"str3="${str1}$str2" echo "str1=$str1"echo "str2=$str2"echo "str3=$str3"[root@ChangerLee 运算比较符]#sh con_str_v1.sh str1=abcstr2=def ghistr3=abcdef ghi</strong>



 

(4)字符串替换的操作

 

Shell实例9:

<strong><span style="font-size:18px;">[root@ChangerLee 运算比较符]#cat con_str_v2.sh #!/bin/bash string="blog.csdn.net/changerjjlee"echo ${string/c/C}#只替换一次echo ${string//c/C}#全部替换[root@ChangerLee 运算比较符]#sh con_str_v2.sh blog.Csdn.net/changerjjleeblog.Csdn.net/Changerjjlee</span></strong> 



0 0
原创粉丝点击