`
jackchen0227
  • 浏览: 147252 次
  • 性别: Icon_minigender_1
  • 来自: 帝都
社区版块
存档分类
最新评论

shell编程之四则运算与浮点运算

 
阅读更多

http://www.cnblogs.com/chengmo/archive/2010/09/30/1839556.html

这个博客的shell编程总结的很好,谢谢博主

在刚刚学习写shell 批处理时候,进行逻辑运算中,少不了需要进行基础的:四则运算,这里说说在linux shell 里面简单的实现方法。

 

1.简单方法

[chengmo@centos5 ~]$ b=$((5*5+5-3/2)) 
[chengmo@centos5 ~]$ echo $b
29

 

在linux shell中,我们可以使用 $(()) 将表达式放在括号中,即可达到运算的功能。

 

2.其它方法:

用:expr 实现运算

 

[chengmo@centos5 ~]$ expr 5 - 4
1

 

注意:将需要运算的表达式写入在expr 后面即可,保证 参数与运算符号中间有空格隔开。

 

类别 语法 说明
条件判断 expr1 \| expr2 如果 expr1 不是零或 null 则传回 expr1,否则传回 expr2。
expr1 \& expr2 如果 expr1 及 expr2 都不为零或 null,则传回 expr1,否则传回 0。
四则运算 expr1 + expr2 传回 expr1 加 expr2 后的值。
expr1 - expr2 传回 expr1 减 expr2 后的值。
expr1\* expr2 传回 expr1 乘 expr2 后的值。
expr1 / expr2 传回 expr1 除 expr2 后的值。
expr1 % expr2 传回 expr1 除 expr2 的余数。
大小判断 expr1 \> expr2 如果 expr1 大于 expr2 则传回 1,否则传回 0。如果 expr1 及 expr2 都是数字,则是以数字大小判断,否则是以文字判断。以下皆同。
expr1 \< expr2 如果 expr1 小于 expr2 则传回 1,否则传回 0。
expr1 = expr2 如果 expr1 等于 expr2 则传回 1,否则传回 0。
expr1 != expr2 如果 expr1 不等于 expr2 则传回 1,否则传回 0。
expr1 \>= expr2 如果 expr1 大于或等于 expr2 则传回 1,否则传回 0。
expr1 \<= expr2 如果 expr1 小于或等于 expr2 则传回 1,否则传回 0。
文字处理 expr1 : expr2 比较一固定字符串,即 regular expression。可以使用下列字符来辅助:

. 匹配一个字符。

$ 找字符串的结尾。

[list] 找符合 list 中的任何字符串。

* 找寻 0 个或一个以上在 * 之前的字。

\( \) 传回括号中所匹配的字符串。

 

 3.使用let:

let与(()) 在shell编程中是可以互换的;它们在循环语句中控制变量变化非常有用;

使用let语句或者(())我们可以像C语言那样写程序~ 对于变量赋值,判断什么的不用繁琐的$VAR,
-eq等等, C语言中怎么用这里就怎么用,很方便
注:(())算数表达式的值在if和while判断时不用在前面加“$”;在echo输出值时需要加"$"
以下引自http://unix-cd.com/unixcd12/article_2740.html

2. 使用 let 来进行算术计算

语法

let expression or (( expression ))

例子:

$ x=10          $ x=12

$ y=2           $ let "x <10"   

$ let x=x+2        $ echo $?

$ echo $x         1

12            $ (( x > 10 ))

$ let "x = x / (y+1)"   $ echo $?

$ echo $x         $ 0

4             $ if ((x > 10 ))

$ (( x = x + 1 ))     >  then echo x greater

$ echo $x         >  else echo x not greater

5             fi

             x greater

循环语句通常使用一个增长的数字变量来进行控制。使用 let 命令,可以在 shell 脚本中使用算术表达式。这个命令允许使用长的整数运算。在上例中, expression 代表一个 shell 变量的算术表达式和能够被 shell 识别的操作符,而((    ))可以替 let 命令。 shell 能够识别的表达式如下所示:

操作符       描述

-         减去

!         逻辑相反

* / %       乘,除,余数

+ -        加,减

<=  >=  < >  关系比较

== !=       等于不等于

=         赋值

括号能够被用作改变表达式中计算的顺序,就像在

let "x=x/(y+1)"

中一样

注意双引号被用来忽略括号的特殊含义。同样如果你希望使用空格来分隔操作符和操作符的时候,就必须使用双引号,或者((  ))语句:

let " x = x + (y / 2)"  或者 (( x= x+ (y / 2) ))

当使用逻辑和关系操作符, (!,<=,>=,<,>,++,~=), 的时候, shell 会返回一个代码变量, ? 会反映结果是真还是假,再一次说明,必须使用双引号来防止 shell 将大于和小于运算符当作 I/O 重定向。

4.浮点运算:

[chengmo@centos5 ~]$ expr 5.0 - 4
expr: 非法参数

 

[chengmo@centos5 ~]$ echo $((5.0-4))
-bash: 5.0-4: syntax error in expression (error token is ".0-4")

 

从上面运算结果,看来上面表达式,不足以支持浮点运算了。查阅资料才发现:bash 不支持浮点运算,如果需要进行浮点运算,需要借助bc,awk 处理。

 

方法一:

[chengmo@centos5 ~]$ c=$(echo "5.01-4*2.0"|bc)
[chengmo@centos5 ~]$ echo $c
-2.99

方法二:

[chengmo@centos5 ~]$ c=$(awk 'BEGIN{print 7.01*5-4.01 }')
[chengmo@centos5 ~]$ echo $c
31.04

 

注:在shell 中$() 与 ``等效。 中间包含命令语句执行,返回执行结果。

分享到:
评论

相关推荐

    3个VB源码集合(文件内存搜索,纯代码四则运算)

    在提供的"3个VB源码集合"中,我们可以看到三个关键领域的应用实例:文件内存搜索、纯代码四则运算。接下来,我们将详细讨论这两个知识点。 一、文件内存搜索 文件内存搜索是一种高级技术,用于在计算机的物理内存...

    Linux命令之bc--浮点计算器、进制转换

    `bc` 是一个任意精度计算器语言,能够处理包括浮点运算在内的多种运算,并且支持条件判断、循环等结构化编程特性。 #### 用途说明 `bc` 命令的主要功能有: 1. **浮点运算**:能够处理浮点数的加减乘除以及更复杂...

    Python语言基础教学设计.pdf

    - 提供实践任务,如四则运算、判断对错,促使学生运用所学知识解决实际问题,培养计算思维和信息意识。 7. **核心素养** - 信息意识:培养通过编程解决实际问题的意识。 - 计算思维:通过分析和综合,设计解决...

    Perl in 21 Days

    Perl具有C语言的许多特性,同时也融入了Shell编程、awk、sed等工具的优点,是一种功能全面、用途广泛的编程语言。 #### 1.2 如何获取Perl? 可以通过官方网站或各大软件仓库下载Perl。对于Windows用户,可以考虑...

    1.Python语言开发要点详解_python教程_waswbb_

    Python的基础语法包括变量定义、数据类型(如整型、浮点型、字符串、布尔型、列表、元组、字典等)、流程控制(如if-else条件语句、for和while循环)、函数定义与调用、异常处理等。理解这些基本元素是掌握Python的...

    初学者需要的程序设计资料

    - **继承与多态**:继承允许子类继承父类的属性和方法,多态则让不同类的对象可以通过同一接口进行操作。 - **模板**:C++提供了一种泛型编程机制,允许程序员编写通用代码。 #### 五、Linux环境下编程 由于描述中...

    C核心技术手册 (又名:C - In a Nutshell中文版)

    当进行算术运算时,如果操作数的类型不同,则会发生自动类型提升。例如,`int`类型的变量与`float`类型的变量相加时,`int`类型的变量会被提升到`float`类型。 **4.2 非算术类型转换** 对于非算术类型的转换,例如...

    在Linux中使用unixbench来测试测试系统性能.docx

    1. **Dhrystone测试**:主要关注字符串处理能力,不涉及浮点运算。此测试旨在考察编译器优化水平、代码效率、内存缓存性能以及整数数据类型的处理效率等。由于Dhrystone测试的结果受到多种因素的影响,因此它是一种...

    gdb手册中文版

    - **浮点硬件**:可以查看和调试浮点运算相关的硬件细节。 - **向量单元**:支持查看向量运算单元的状态。 - **操作系统辅助信息**:获取有关操作系统的信息,如内存区域属性。 #### 十五、总结 通过上述内容可以...

    361冲刺4

    【361冲刺4】是针对Python编程语言的一次学习冲刺,旨在帮助学员在短时间内迅速提升Python技能。在这个阶段的学习中,我们将会深入探讨Python的核心概念、语法特性以及实际应用,以便于更好地理解和掌握这门强大的...

    PHP教程:快速学习PHP

    - **UNIX Shell风格注释**:使用井号(#)进行注释,同样适用于单行注释。 示例: ```php # 这是一条单行注释 ``` #### 二、数据类型与变量 **2.1 变量类型** PHP是一种弱类型语言,变量的类型根据其赋值...

    android内存管理-MAT与防范手段.pdf

    - **优化策略:** 浮点运算相较于整数运算更为耗时,除非必要,尽量使用整数类型。 **11. 一些标准操作的时间比较** - **优化策略:** 了解不同操作的执行成本,合理安排算法和数据结构的选择。 **12. 为响应灵敏...

    linux_c API函数大全

    例如,`atof()`、`atoi()`和`atol()`将字符串转化为浮点、整数和长整数,`gcvt()`进行浮点数到字符串的四舍五入转换,`strtod()`、`strtol()`和`strtoul()`分别将字符串转换为浮点、长整和无符号长整数,`toascii()`...

    Python Quick Reference

    在 Python Shell 中可以使用 `help()` 函数来获取各种帮助信息。 - **`help()`**: 调用此函数时,将启动交互式帮助系统。 - **`help(m)`**: 显示关于模块 `m` 的帮助信息。 - **`help(f)`**: 显示关于函数 `f` 的...

Global site tag (gtag.js) - Google Analytics