Shell编程-04-Shell中变量数值计算
算术运算符
在任何一门形式的语言中均会存在算术运算的情况,Shell常见的运算符如下所示:
| 运算符 | 含义 |
|---|---|
| + - * / % | 加 减 乘 除 求余 |
| ** | 幂运算 |
| ++ -- | 自增 自减 |
| && || ! | 与(and) 或(or) 非(取反) |
| < <= > >= == != | 小于 小于等于 大于 大于等于 等于 不等于 |
| << >> | 左移位 右移位 |
| ~ | & ^ | 按位取反 按位异或 按位与 按位或 |
| = += -= *= /= %= | 如a+=1与a=a+1相同 |
算术运算命令
| 运算命令 | 含义 |
|---|---|
| (()) | 整数运算,效率很高 |
| let | 整数运算,类似于(()) |
| expr | 整数运算,另外还有很多额外功能 |
| bc | Linux中的计算器,适合整数及小数运算 |
| $[] | 整数运算 |
| awk | 既可用于整数运算,也可用于小数运算 |
| declare | 定义变量值和属性,-i 参数可以用于定义整型变量并进行运算 |
数值运算用法
(())用法
双小括号常用于数值运算和数值比较,因其效率很高,用法灵活,因此是常用的运算之一。
| 示例 | 含义 | 备注 |
|---|---|---|
| ((i=i+1)) | 运算后并进行赋值,即先进行i+1计算并将该值赋值给i | 只能使用echo $((i=i+1))进行输出 |
| i=$((i+1)) | 表达式进行运算后并将值赋给i | |
| ((2>1&&8>3)) | 进行比较后再进行逻辑运算 | 常用于条件判断 |
| echo $((4+2)) | 直接进行计算并输出结果 |
(())用法示例
[root@localhost ~]# echo $((90-12));echo $((80+12)) # 基本运算
78
92
[root@localhost ~]# ((a=100))
[root@localhost ~]# ((a*=2))
[root@localhost ~]# echo $a # 输出运算结果
200
[root@localhost ~]# ((a=100+2**10-200%100)) # 复杂运算
[root@localhost ~]# echo $a
1124
[root@localhost ~]# a=$((50**2*2+2500)) # 运算并进行赋值
[root@localhost ~]# echo $a
7500
[root@localhost ~]# a=100
[root@localhost ~]# echo $((a++));echo $((++a)) # 自增运算
100
102
[root@localhost ~]# echo $((a**2))
10404
[root@localhost ~]# echo $((2==2)) # 比较运算
1 # 1:代表结果为真
[root@localhost ~]# echo $((2>2))
0 # 0:代表结果为假
++/--:如果++/--在变量前面,则代表先进行运算再输出结果,如果++/--在变量后面,则先输出结果再进行运算
(()):在执行命令时不需要添加$,直接使用((4+3))即可,如果输出进行变量赋值,则需要添加$,如使用a=$((4+3))
(())中所有字符中有无空格均不受影响
let用法
let的语法格式如下所示:
let var=value
let用法示例
[root@localhost ~]# a=8
[root@localhost ~]# b=9
[root@localhost ~]# c=$a+$b
[root@localhost ~]# echo $c
8+9 # 进行字符串连接
[root@localhost ~]# let c=$a+$b
[root@localhost ~]# echo $c
17 # 进行相加
let let c=$a+$b等同于((c=$a+$b))
expr用法
expr的语法格式如下所示:
expr 表达式
expr用法示例
[root@localhost ~]# expr 4+8; expr 2*5
4+8
2*5
[root@localhost ~]# expr 4 + 8; expr 2 \* 5 # 注意空格
12
10
[root@localhost ~]# a=100
[root@localhost ~]# b=200
[root@localhost ~]# c=`expr $a + $b`
[root@localhost ~]# echo $c
300
[root@localhost ~]# a=2
[root@localhost ~]# b=5
[root@localhost ~]# c=`expr $a \* $b`
[root@localhost ~]# echo $c
10
使用expr的注意事项如下所示:
运算符与计算项之间左右间必须要有一个空格,否则会出现报错
使用*需要进行转义符\
bc用法
bc是Linux中的计算器,可作为命令行计算工具使用
bc用法示例
[root@localhost ~]# bc
bc 1.06.95
Copyright 1991-1994, 1997, 1998, 2000, 2004, 2006 Free Software Foundation, Inc.
This is free software with ABSOLUTELY NO WARRANTY.
For details type `warranty'.
1+2
3
1.0369+2.014789
3.051689
[root@localhost ~]# echo 100+200 | bc # 通过管道进行计算
300
[root@localhost ~]# a=250
[root@localhost ~]# b=360
[root@localhost ~]# c=`echo $a + $b | bc`
[root@localhost ~]# echo $c
610
awk用法示例
[root@localhost ~]# echo "12.36 12.36" | awk '{print $1+$2}'
24.72
[root@localhost ~]# echo "12.36 12.36" | awk '{print $1*$2+$2}'
165.13
[root@localhost ~]# echo "12.36 12.36" | awk '{print $1*($2+$2)}'
305.539
[root@localhost ~]# echo "10 100" | awk '{print $1*($2+$2)}'
2000
declare用法
declare的语法格式如下所示:
declare -i var=value
declare用法示例
[root@localhost ~]# declare -i a=120 b=130
[root@localhost ~]# a=a+b #因为已经申明为整数,可以直接进行运算
[root@localhost ~]# echo $a
250
$[]用法示例
[root@localhost ~]# a=120
[root@localhost ~]# b=1290
[root@localhost ~]# a=$[a+b]
[root@localhost ~]# echo $a
1410
[root@localhost ~]# echo $[5/3]
1
[root@localhost ~]# echo $[5%3]
2
read用法示例
[root@localhost ~]# read -t 20 -p "Input 3 number:" a b c
Input 3 number:1 2 3
[root@localhost ~]# echo $a $b $c # 通过用户输入传递变量赋值
1 2 3
本文同步在微信订阅号上发布,如各位小伙伴们喜欢我的文章,也可以关注我的微信订阅号:woaitest,或扫描下面的二维码添加关注:

Shell编程-04-Shell中变量数值计算的更多相关文章
- shell编程系列6--shell中的函数
shell编程系列6--shell中的函数 .函数介绍 linux shell中的函数和大多数编程语言中的函数一样 将相似的任务或者代码封装到函数中,供其他地方调用 语法格式 第一种格式 name() ...
- shell编程系列7--shell中常用的工具find、locate、which、whereis
shell编程系列7--shell中常用的工具find.locate.which.whereis .文件查找之find命令 语法格式:find [路径] [选项] [操作] 选项 -name 根据文件 ...
- 【Shell编程】Shell程序设计
1.Shell简介 作为Linux灵感来源的Unix系统最初是没有图形化界面的,所有的任务都是通过命令行来实现的.因此,Unix的命令行系统得到了很大的发展,逐步成为一个功能强大的系统. Sh ...
- Linux Shell编程(8)——变量详解
不同与许多其他的编程语言,Bash不以"类型"来区分变量.本质上来说,Bash变量是字符串,但是根据环境的不同,Bash允许变量有整数计算和比较.其中的决定因素是变量的值是不是只含 ...
- 小鸟初学Shell编程(七)变量引用及作用范围
变量引用 那么定义好变量,如何打印变量的值呢?举例下变量引用的方式. ${变量名}称作为对变量的引用 echo ${变量名}查看变量的值 ${变量名}在部分情况下可以省略成 $变量名 [root@li ...
- shell编程基本语法和变量
一.编写shell脚本基本格式 拿最简单的hello word举例 .#!/bin/bash echo 'hello world' .#!/bin/bash:告诉计算机,使用bash解释器来执行代码 ...
- 小鸟初学Shell编程(六)变量赋值
变量的意义 我们在使用Linux命令或脚本的时候,会有一些输出,那么这些输出的信息可以用变量临时存储,以备我们下一条命令或脚本使用. 变量的定义 变量的定义建议用一个有意义的英文单词来代表变量,不要使 ...
- shell编程01—shell基础
01.学习shell编程需要的知识储备 1.vi.vim编辑器的命令,vimrc设置 2.命令基础,100多个命令 3.基础.高端的网络服务,nfs,rsync,inotify,lanmp,sersy ...
- Linux shell编程02 shell程序的执行 及文件权限
第一个shell脚本 1. shell编程的方式 交互式shell编程 非交互式shell编程:执行的语句存放到一个文件 shell脚本:可以任意文件名,建议扩展名为sh 2. ...
- Shell编程(二)——shell的基础知识及常用命令
shell的基础知识 一.bash有以下特点: 1.记录命令历史 2.指令和文件名补全 3.别名 alias rm='rm -i' 4.通配符 * 0个或多个字符 ?匹配一个字符 5 输入输出重定向 ...
随机推荐
- ffmpeg采集帧出错不退出的补丁
在ffmpeg2.81.11和ffmpeg3.0.7上试验.ffmpeg没有FFERROR_REDO常量定义,但ffmpeg3.0.7上有. diff --git a/libavdevice/v4l2 ...
- android 点击返回键 以及 加载activity 生命周期 记录。。。,一目了然
简叙 Activity 生命周期及android 返回按钮捕捉 @Override protected void onPostCreate(Bundle savedInstanceState) { ...
- mysql-5null值处理
值为null遇到的问题: 1.使用select对数据进行处理时,如果有格值为null,该命令会无法正常工作.如示例一 2.使用where限定条件时,null值不能处理.如示例二 -- 新建一张表,并填 ...
- jquery文件的引入
上节课说到,一般情况下,是库的文件,该库中都会抛出来构造函数或者对象 ,如果是构造函数,那么创建对象,如果是对象直接调用属性和方法 使用jquery第一步,先引入jquery,然后再写相应的jquer ...
- cesium初始化参数
var viewer = new Cesium.Viewer('cesiumContainer',{ animation:false, //动画控制不显示 //baseLayerPicker:fals ...
- 学python着几个要搞清楚WSGI和uWSGI区别
1 WSGI是一种通信协议 2 uwsgi是一种线路协议而不是通信协议,在此常用于在uWSGI服务器与其他网络服务器的数据通信. 3 而uWSGI是实现了uwsgi和WSGI两种协议的Web服务器.
- YII 自带验证码实现
共三步,分别controllers,models,views各一层添置一行代码即可实现 第一步在controllers添加 public function actions() { return arr ...
- 迷你MVVM框架 avalonjs 沉思录 第2节 DOM操作的三大问题
jQuery之所以击败Prototype.js,是因为它自一开始就了解这三大问题,并提出完善的解决方案. 第一个问题,DOM什么时候可用.JS不像C那样有一个main函数,里面的逻辑不分主次.但JS是 ...
- Linux CentOS修改网卡IP/网关设置
1. 修改对应网卡IP的配置文件 修改以下内容 2. 修改对应网卡的网关的配置文件 vi /etc/sysconfig/network 修改以下内容 3. CentOS 修改DNS 修改以下内容 4. ...
- ConcurrentHashMap的简单理解
一.效率低下的HashTable容器HashTable容器使用synchronized来保证线程安全,但在线程竞争激烈的情况下HashTable的效率非常低下.因为当一个线程访问HashTable的同 ...