shell中计算命令详解(expr、(())、 $[]、let、bc )

目录

一、expr命令

1、整数运算(注意需要空格,需要加"\"不让特殊字符转义)

1、获取计算的结果赋值给新变量的语法

2、字符串语法 

1、计算字符串的长度语法

2、截取字符串语法

3、获取一个字符在字符串中第一次出现的位置

4、正则表达式匹配1语法

5、正则表达式匹配2语法,功能和1一样,语法比1简单

二、计算命令 :(()) 命令

1、作用   

2、介绍

3、语法

         4、用法

① 给与双括号里面的变量赋值

②给与双括号外面的变量赋值

③于逻辑预算符进行使用

三、let 命令详解

四、$[] 命令

1、功能

能够使用$[ ]进行整数的数学运算

2、语法

3、用法

五、bc 命令

1、功能:

Ⅰ:bc中的互动式的数学运算

2、语法

3、内置变量

Ⅱ: bc在shell中进行非互动式的bc管道运算

1、语法

2、将bc计算的结果赋值给shell变量 

Ⅲ: bc在shell中进行非互动式的输入重定向运算

1、作用

2、语法

总结: 


一、expr命令

expr (evaluate expressions的缩写)。"表达式求值"。Shell expr是一个功能强大。并且比较复杂的命令,它除了可以实现整数计算,还可以结合一些选项对字符串进行处理,例如计算字符串长度、字符串比较、字符串匹配、字符串提取等。

空格 隔开每个项
\(反斜杠) 放在 shell 特定的字符前面
“”(引号) 对包含空格和其他特殊字符的字符串要用引号括起来

1、整数运算(注意需要空格,需要加"\"不让特殊字符转义)

shell中计算命令详解(expr、(())、 $[]、let、bc )_第1张图片

1、获取计算的结果赋值给新变量的语法

可以使用$()和 两个反撇好”``“  表示。

shell中计算命令详解(expr、(())、 $[]、let、bc )_第2张图片

2、字符串语法 

1、计算字符串的长度语法

语法:expr length  

2、截取字符串语法

语法:expr substr ”字符串“ start end

#start 截取字符串的起始位置,从1开始(注意编号从一开始,而不是0开始)

#end截取字符串的结束位置,包含这个位置也被截取

 (start=1;end=2)

3、获取一个字符在字符串中第一次出现的位置

语法:expr index 被查找的字符串  需要查找的字符

4、正则表达式匹配1语法

语法: expr match  字符串  正则表达式

#正则表达式默认带有“^”,表示已什么开头

#返回值为符合,匹配字符长度,否则返回0

#正则表达式“."(点)代表任意一个字符

#正则表达式中通配符“*”(星号)代表前面的字符可以出现0次到多次

#“.*m”(点心m):匹配字符串中m前面的字符串长度(以任意长度字符开头到m结束且包含m,匹配m之前的长度。得出匹配字符串的长度)

shell中计算命令详解(expr、(())、 $[]、let、bc )_第3张图片

5、正则表达式匹配2语法,功能和1一样,语法比1简单

语法:expr 字符串 :正则表达式

#正则表达式默认带有“^”,表示已什么开头

#返回值为符合,匹配字符长度,否则返回0

 expr  小结:

1.整数计算:

      expr   整数运算表达式

2字符串操作:

expr length 字符串     :获取字符串的长度

expr substr  字符串   start   end   :      截取字符串

expr index   字符串  查找的字符       :查找字符在字符串中第一次出现的位置,位置从1开始的

(expr match  字符串    正则表达式);(expr   字符串 : 正则表达式)

二、计算命令 :(()) 命令

1、作用   

 (())在运算表达式书写时,彼此之间有无空格都可以,遇到特殊字符时也不需要加“\”

能够使用(())进行整数的数学运算

2、介绍

双小括号(()),用于进行数学运算表达式的执行,将数学运算表达式放在((和))之间。可以使用$获取(())表达式命令的结果,这和使用$获得变量值是一样的。

3、语法

((整数运算表达式))

4、用法

① 给与双括号里面的变量赋值

((a=1+6))     可以在计算完成后给变量赋值。

((b=a-1))      把a-1的计算结果赋值给b,此中的变量a前面不需要加$,(())具有自动解析双括号内                         的变量的功能。

②给与双括号外面的变量赋值

a=$((1+6))   

b=$((a-1))

c=$((a+b))

解析:可以在(())前面加上S符号获取(())命令的执行结果,从而获取整个表达式的值。以c=$((a+b))为例,即将a+b这个表达式的运算结果赋值给变量c。注意,如果c=((a+b)这样的写法是错误的,不加$就不能取得表达式的结果。

③于逻辑预算符进行使用

((a>7 && b==c))    :   (())也可以进行逻辑运算,在if语句中常会使用逻辑运算。

echo $((a+10))      :   需要立即输出表达式的运算结果时,可以在(())前面加$符号

((a=3+5,b=a+10))  :   对多个表达式同时进行计算时,多表表达式使用"∵"号隔开

需求:

1、计算1+6并赋值给变量a

2、计算变量a-1赋值给变量b

3、计算变量a+变量b赋值给变量c

4、打印变量a,变量b,变量c的值

5、$赋值写法

6、(())多个表达式计算赋值

7、 echo输出直接使用(())

8、 (())用于逻辑表达式在if中使用

shell中计算命令详解(expr、(())、 $[]、let、bc )_第4张图片

(()) 用法 小结:

1、括号内赋值:((变量名=整数表达式))

2、括号外赋值:变量名=$((整数表达式))

3、多表达式赋值:((变量名1=整数表达式1,变量名2=整数表达式2...))

4、与if条件句配合使用: if((整数表达式))

三、let 命令详解

功能:能够使用let进行整数数学运算赋值

let命令和双小括号(()),在数学计算方面功能一样,但是没有(())的功能强大,let只能用于赋值计算,不能直接输出,不可以和if条件判断一起使用。

语法:let 赋值表达式

1、语法功能等价于((表达式)),let后面的整数运算表达式中变量不需要加$,特殊字符前也不需要加“\”

2、多个表达式之间使用空格 而不是","号

3、对于类似let a+b这样的写法,Shell虽然计算了a+b的值,但却将结果丢弃,如果echo let a+b 会直接输出字符串 a+b;若不想这样。可以使用1et summa+b将a+b的结果保存在变量sum中

示例:正常整数运算

shell中计算命令详解(expr、(())、 $[]、let、bc )_第5张图片

变量++和++变量的区别

shell中计算命令详解(expr、(())、 $[]、let、bc )_第6张图片

变量数值自增+2的表示方法

shell中计算命令详解(expr、(())、 $[]、let、bc )_第7张图片

乘法表示方法

shell中计算命令详解(expr、(())、 $[]、let、bc )_第8张图片

let 命令小结:

1、let数字整数计算用法

2、作用:用于赋值,是最简洁的整数运算赋值命令计算赋值用法: let变量名=整数运算表达式

3、多个表达式计算赋值用法: let  变量名1=整数运算表达式1  变量名2=整数运算表达式2  ...

四、$[] 命令

1、功能

能够使用$[ ]进行整数的数学运算

和(())、let命令类似,$[ ]也只能进行整数运算。但是只能对单个表达式的计算求值与输出,不能多个同属进行。

2、语法

格式:$[表达式]

①$[ ]会对表达式进行计算,并取得计算结果

②表达式内部不可以赋值给变量没有(())功能强大

3、用法

shell中计算命令详解(expr、(())、 $[]、let、bc )_第9张图片

五、bc 命令

1、功能:

完成整数及小数运算

①能够在bc中进行互动式的数学运算

②能够在shell中进行非互动式的bc管道运算

③能够在shell中非互动式的输入重定向bc运算

Ⅰ:bc中的互动式的数学运算

2、语法

语法一(作为系统计算器使用)

格式:bc [选项] [参数]

shell中计算命令详解(expr、(())、 $[]、let、bc )_第10张图片

 还可以对文件内容进行计算

shell中计算命令详解(expr、(())、 $[]、let、bc )_第11张图片

3、内置变量

scale :指定精度,对计算结果指定保留小数;默认为0,即不使用小数部分只保留整数位。

Ⅱ: bc在shell中进行非互动式的bc管道运算

1、语法

echo "表达式" | bc [选项]

shell中计算命令详解(expr、(())、 $[]、let、bc )_第12张图片

2、将bc计算的结果赋值给shell变量 

第一种方式:

A=$(echo "表达式" | bc [选项])

第二种方式:反引号

A=`echo "表达式" | bc [选项]`   

两种方式区别:``反引号是所有linux系统支持的方式。兼容性较好,但是容易与引号产生混淆

$()不是所有linux系统都支持的方式。兼容性较差,但是不容易产生混淆

shell中计算命令详解(expr、(())、 $[]、let、bc )_第13张图片

Ⅲ: bc在shell中进行非互动式的输入重定向运算

1、作用

 将计算表达式输出给bc去执行,特点类似于文件中输入,可以输入多行表达式,更加清晰

2、语法

第一种方式:

A=`bc << EOF

第一行表达式

第二行表达式

第三行表达式

......................

EOF

` (反引号结束)

第二种方式:

A=$(bc << EOF

第一行表达式

第二行表达式

第三行表达式

......................

EOF

) 括号结束

shell中计算命令详解(expr、(())、 $[]、let、bc )_第14张图片

总结: 

let 赋值最方便    

(()) 直接求值输出最方便,且支持多表达式同时运算

expr     优点:可以直接输出

            缺点:计算表达式里面引用变量使用$,特殊字符需要转义只能计算一个表达式

(())    优点:直接输出,里面直接使用变量名,特殊字符不需要转义,多个表达式赋值,可进行多表达式               同时i计算,使用”,“互相分开

         缺点:需要获值以后才可以输出

let     优点:赋值简单,特殊字符不需要转义,可进行多表达式同时i计算,使用空格互相分开

         缺点:不能直接输出
$[ ]    优点:特殊字符不需要转义

          缺点: 不能进行多表达式同时计算

bc 可以计算整数和小数,在保留小数后几位,只有除法有效

  

你可能感兴趣的:(shell脚本,linux基础,运维,运维,linux)