shell 里面的计算
---恢复内容开始---
关于shell里面的计算其实早在接触LINUX的时候就已经接触到了。每次在运用的时候却是在网上到处找,所以觉得花点时间好好研究下。
首先了解下常用的算数运算符号:
|
+ - |
加法(正号),减法(负号) |
|
* / % |
乘法,除法,取余 |
|
** |
幂运算 |
|
++ -- |
增加或者减少,可前置也可放在变量结尾 |
|
! && || |
逻辑非(取反)。逻辑与(and),逻辑或(or) |
|
< <= > >= |
小于,小于等于 大于 大于等于 |
|
== != = |
比较符号(相等。不相等。 对于字符串=也是等于号) |
|
<< >> |
向左移位,向右移位 |
|
~ | & ^ |
安位取反 按位异或 按位与 按位或 |
|
= += -= *= /= %= |
赋值运算符例如 a+=1 就是a=a+1 |
常用的算数运算命令如下
|
运算操作与运算命令 |
意义 |
|
(()) |
用于证书运算的常用运算符,效率很高 |
|
let |
用于证书运算,类似于‘(())’ |
|
expr |
可用于整数运算,但还有很多其他额外的功能 |
|
bc |
Linux下的一个运算程序(数和证书和小数运算) |
|
$[] |
用于整数运算 |
|
awk |
awk既可以用于证书运算,也可以用于小数运算 |
|
declare |
定义变量和属性,-i参数可以用于定义整形变量,做运算/ |
一:双小括号的运算实践
1.1
利用(())进行简单的计算((i=i+1))表示把i+1的结果赋给i,但是如果要引用结果的话,不知能echo ((i=1+1))必须要加上$符号 echo $((i=1+1))


1.2 利用(())双括号进行比较以及判断
这里的 1 表示真,0表示假
可以和逻辑运算一起。
注意:上面涉及的数字以及变量必须为整数(整形),不能是小数或者字符串
1.3 --,++的用法
举个最简单的例子:
++a表示输出计算后的数,a++表示输出的是a的值
1.4 (())的赋值运算
这里需要注意的是 (())里面引用变量可以不加$ (当然也可以加,我习惯加)
(())里面所有字符之间没有空格,有一个或者多个不会影响结果。let命令和(())功能相同但是效率较低这里就不说了
二 expr命令的用法
expr既可以用于整数计算,也可以用于字符串的长度,匹配的运算处理。
2.1用于计算


2.2 用于字符串,expr判断字符串是否是整数。由于函数库比较少,所以判断字符串是否为整数是一个比较难的事情。实现原理,比一个字符串和1相加,查看返回值,如果返回值是0,那么这个数就是整数

注意,使用expr 后面计算符号前后必须有空格!!
也可以使用match来匹配如下:
expr的特殊用法,判断文件名是否满足要求!
计算字符串的长度

AWK 实现计算!
用awk实现计算的一个非常好的方法,特别是小数


我们上面的都是直接用$i 来引用,也可以用declare(同typeset)来定义 然后直接使用
这样用的比较少
$[]符号的运算

以上就是我们常用的运算!!下面有几个实例
写一个脚本,完成输入两个数,判断这两个数是否为整数,如果是整数,完成相加并且输出结果,如果不是则给出相应的提示
#!/bin/bash
read -t 15 -p "please input two num:" a b
[ ${#a} -le 0 ] && { echo "the first num is null exit 1"}
[ ${#b} -le 0 ] && { echo "the secound num is null exit 1"}
expr $a + 1 &> /dev/null
RETVAL_A=$?
expr $b + 1 &> /dev/null
RETVAL_B=$?
if [ $RETVAL_A -ne 0 -o $RETVAL_B -ne 0 ] ;then
echo "one of the num is not num ,pls input again"
exit 1
fi
---恢复内容结束---
shell 里面的计算的更多相关文章
- Shell之数学计算
本博客已经迁往http://www.kemaswill.com/, 博客园这边也会继续更新, 欢迎关注~ 数学计算是Shell中比较常用的一种操作, 但是因为shell中所有的变量都默认为字符串, ...
- shell 中数学计算总结
shell中的赋值和操作默认都是字符串处理,在此记下shell中进行数学运算的几个特殊方法,以后用到的时候可以来看,呵呵. 1.错误方法举例 a) var=1+1 echo $var ...
- Shell中数学计算/运算
shell中的赋值和操作默认都是字符串处理. 1)使用let(只能进行整数运算)var=1let "var+=1"echo $var输出结果为2 注意:a)let几乎支持所有的运算 ...
- Shell脚本中计算字符串长度的5种方法
有时在Linux操作系统中需要计算某个字符串的长度,通过查询资料整理了下目前Shell中获取字符串的长度的多种方法,在这里分享给大家,方法如下: 方法1: 使用wc -L命令wc -L可以获取到当前行 ...
- 通过shell进行数学计算
对于基本运算,可以使用let, $(())和$[] 对于高级运算,使用expr和bc这两个工具 [hupeng@hupeng-vm shell]$n1= [hupeng@hupeng-vm shell ...
- shell脚本,计算学生分数的题目。
1.计算学生平均分数的值是多少? 2.计算每门课都大于80分的学生姓名.3.计算每门课都小于90分的学生姓名.
- shell脚本,计算1+2+3+....100等于多少?
第一种方法,通过for循环来计算[root@localhost wyb]# cat yibai.sh #!/bin/bash #从1+++...100的结果 i= ` do sum=$(($sum+i ...
- Linux下Shell命令加减乘除计算
使用 expr命令 (其中做乘的时候*号要用斜杠进行转义) 除以 [hadoop-user@hadoop1]$ echo `expr 9 / 3` 3加 [hadoop-use ...
- linux shell执行远程计算机上的命令或者脚本(ssh)
大数据平台下经常建立设计多个节点的集群需要统一部署,这就设计到守护进程或者部署脚本在不同节点执行,如果能在master机器上,统一执行脚本,一次性启动整个集群的服务,感觉很nice.因为,分享如下内容 ...
随机推荐
- Vue-1:鄙人是如何开始学习的
说实话,Vue这个东西早想学习她了.为啥呢?不是因为有多火热多好用多水嫩...而是每次面试都会问我,你会不会Vue...接下来就是突然安静的空气,,,真TM气人.所以鄙人在经历诸事之后决心一定要搞一下 ...
- javascript之DOM总结
DOM简介 全称Document Object Model,即文档对象模型.DOM描绘了一个层次化的树,允许开发人员添加.删除.修改页面的某一部分. 浏览器在解析HTML页面标记的时候,其 ...
- 如何选择K-Means中K的值
K-Means需要设定一个簇心个数的参数,现实中,最常用于确定K数的方法, 其实还是人手工设定.例如,当我们决定将衣服做成几个码的时候,其实就是在以 人的衣服的长和宽为为特征进行聚类.所以,弄清楚我们 ...
- 小D课堂 - 零基础入门SpringBoot2.X到实战_第14节 高级篇幅之SpringBoot多环境配置_59、SpringBoot多环境配置介绍和项目实战
笔记 1.SpringBoot多环境配置介绍和项目实战(核心知识) 简介:SpringBoot介绍多环境配置和使用场景 1.不同环境使用不同配置 例如数据库配置,在开发的时候, ...
- SQLServer 断开数据库连接
数据库名:test1 1. 查询数据库当前连接 select * from master.sys.sysprocesses where dbid = db_id('test1') 2. 断开指定连接 ...
- 【学习笔记】python3中csv文件使用
1. reader=csv.reader(f, delimiter=','):按行读取数据,reader为生成器,读取的每行数据为列表格式,可以通过delimiter参数指定分隔符. import c ...
- Unity* 实体组件系统 (ECS)、C# 作业系统和突发编译器入门
Unity* 中的全新 C# 作业系统和实体组件系统不仅可以让您轻松利用以前未使用的 CPU 资源,还可以帮助您更高效地运行所有游戏代码.然后,您可以使用这些额外的 CPU 资源来添加更多场景动态和沉 ...
- C++学习笔记-面向对象模型探究
C++中的class从面向对象理论出发,将变量(属性)和函数(方法)集中定义在一起,用于描述现实世界中的类.从计算机的角度,程序依然由数据段和代码段构成.那么C++编译器如何完成面向对象理论到计算机程 ...
- 【STM32】NVIC中断优先级管理
(1)NVIC中断优先级分组 1>,CM4内核支持256个中断,其中包含了16个内核中断和240个外部中断,并且 具有256级的可编程中断设置. 2>,STM32F4并没有使用CM4的内核 ...
- PTA(Basic Level)1021.个位数统计
给定一个 k 位整数 \(N=d_{k−1}10^{k−1}+⋯+d_110^1+d_0 (0≤d_i≤9, i=0,⋯,k−1, d_{k−1}>0)\),请编写程序统计每种不同的个位数字出现 ...