变量的数值(整数)计算

变量的数值计算常用的有如下几个命令:

  • (())用法:

如果要执行简单的整数运算,只需要特定的算术表达式用"$(("和"))"括起来即可

shell的算术运算符号常置于"$(("......"))"的语法中。这一语法如同双引号功能,除了内嵌双引号无需转义

运算符 意义
++ -- 增加及减少,可前置也可放在结尾
+ - ! ~ 一元的正号与负号;逻辑与位的取反
*  /  % 乘法,除法,与取余
+ - 加法,减法
<<= >> = 比较符号
== !== 相等与不相等
<< >> 向左位移   向右位移
& 位的AND
^ 位的异或
| 位的或
&& 逻辑的AND
|| 逻辑的OR
?: 条件表达式

=   +=   -=    *=  /= %=

&=   ^=   <<=  >>= |=

赋值运算符a+=1  都相当a=a+1

范例1:shell的算术运算实例如下:

[[email protected] ~]# ((a=1+2**3-4%3)) 
[[email protected] ~]# echo $a
8
[[email protected] ~]# b=$((a=1+2**3-4%3))
[[email protected] ~]# echo $b
8
[[email protected] ~]# echo $((a=1+2**3-4%3))  
8

提示:上面是三种不同的变量计算定义和使用的方式

[[email protected] ~]# echo $((a+=1))   #相当a=a+1
9
[[email protected] ~]# echo $((a++))  
9
[[email protected] ~]# echo $((a--))   
10
[[email protected] ~]# echo $((3>2))    #比较大小
1 
[[email protected] ~]# echo $((3<2))     #比较大小
0

提示:

  1. **为幂运算:%为取模运算(就是除法当中取余数),加减乘除
  2. 上面涉及到的参数变量必须为整数(整型),不能是小数(符点数)或者字符串后面的bc命令可以进行浮点数运算,但一般较少用到,下文会讲解。提醒下,你可以直接在shell脚本中使用上述命令进行计算。
  3. echo $((a++))和echo $((a--))表示先输出a自身的值,然后在进行++--的运算,echo $((++a)和

$((--a))表示先进行++ --的运算,在输出a自身的值

记忆方法:变量a在前,表达式的值为a,然后a自增或自减,变量a在符号后,表达式值自增或自减,然后a值自增或自减

范例2:--,++在变量前后的举例理解:

[[email protected] ~]# echo $((3--2)) 
5
[[email protected] ~]# echo $((3==2))   
0

范例3:定义变量计算的例子

[[email protected] ~]# xcn=99
[[email protected] ~]# echo $(($xcn + 1))
100
[[email protected] ~]# echo $(( $xcn + 1 ))
100
[[email protected] ~]# xcn=$(( $xcn + 1 ))   #还可以赋值给变量然后输出变量
[[email protected] ~]# echo $xcn
100

#提示(())中的变量也可以去掉$符号
[[email protected] ~]# unset xcn
[[email protected] ~]# xcn=99
[[email protected] ~]# echo $((xcn+1))
100

范例4:各种(())的计算命令行执行例子:

[[email protected] ~]# echo $((100/5))   #除法 取商数
20
[[email protected] ~]# echo $((100/5))
20
[[email protected] ~]# echo $((100+5)) 
105
[[email protected] ~]# echo $((100*5)) 
500
[[email protected] ~]# echo $((100-5))  
95
[[email protected] ~]# echo $((100**5))   #幂
10000000000
[[email protected] ~]# echo $((100%5))   #取模,余数
0

范例5:各种(())运算的shell脚本例子

#!/bin/bash
a=6
b=2
echo "a-b =$(($a-$b))"
echo "a+b =$(($a+$b))"
echo "a*b =$(($a*$b))"
echo "a/b =$(($a/$b))"
echo "a**b =$(($a**$b))"
echo "a%b =$(($a%$b))"

执行结果如下:
[[email protected] day2]# sh jisuan.sh 
a-b =4
a+b =8
a*b =12
a/b =3
a**b =36
a%b =0

范例6:实践考试题,内容如下:

把a,b两个变量通过命令行脚本传参的方式实现上面混合运算脚本的功能

a=$1
b=$2
echo "a-b =$(($a-$b))"
echo "a+b =$(($a+$b))"
echo "a*b =$(($a*$b))"
echo "a/b =$(($a/$b))"
echo "a**b =$(($a**$b))"
echo "a%b =$(($a%$b))"

执行结果如下:
[[email protected] day2]# sh jisuan.sh 6 2
a-b =4
a+b =8
a*b =12
a/b =3
a**b =36
a%b =0
时间: 2024-11-05 19:40:30

变量的数值(整数)计算的相关文章

C# 不借助第三个变量实现两整数交换

c#中实现两个int变量的数值互换,在借助第三个变量做临时载体的情况下,非常简单. int a = 10; int b = 5; int c ; c = a; a = b; b = c; 如果不借助第三方变量,有几种实现的方法: 1.异或算法(这种方法不借助第三个变量,也不会产生溢出,比较安全,但仅限整数类型) int a = 10; int b = 5; a ^= b; b ^= a; a ^= b; Console.WriteLine("{0} {1}", a, b); 2.直接赋

python学习笔记2—python文件类型、变量、数值、字符串、元组、列表、字典

python学习笔记2--python文件类型.变量.数值.字符串.元组.列表.字典 一.Python文件类型 1.源代码 python源代码文件以.py为扩展名,由pyton程序解释,不需要编译 [[email protected] day01]# vim 1.py #!/usr/bin/python        print 'hello world!' [[email protected] day01]# python 1.py hello world! 2.字节代码 Python源码文件

笔试算法题(23):数值整数次方 &amp; 最大对称子串

出题:数值的整数次方(不考虑溢出),实现函数double Power(double base, int exponent): 分析: 解法1:最简单的方法是使用直接的乘法运算,但是注意处理几种特殊情况:exponent为负数,base为0: 解法2:将exponent分解成2的不同次方相加的表达式,通过重复平方来最大程度的减少乘法运算的次数. 当然,也可以递归实现,当n为偶数时,a^n=a^(n/2) * a^(n/2):当n为奇数时,a^n=a^((n-1)/2) * a^((n-1)/2)

for循环中i--的妙用 及 两变量互换数值的问题

int[] array = new int[4]; for(int i = 0; i < array.length; i++){ array[i] = (int)(Math.random() * 10); for(int j = 0; j < i; j++){ if(array[i] == array[j]){ //相同就重取随机数 i--; break; } } } 以上是一段取四个不相等随机数的代码,这里的 i-- 是这段代码的核心. 在内层for循环中,一旦 array[i] == ar

Java 交换两个变量的数值

一.参数传递方法 为解决标题问题,首先介绍参数传递方法.目前各类程序设计语言的参数传递方法主要有三种: 按值传递 按引用传递 按指针传递 其中按值传递表示方法(函数)接收的是调用者提供的变量的拷贝,不改变参数的值:按引用传递表示方法(函数)接收的调用者提供的变量地址:按指针传递表示方法(函数)接收的是调用者提供的指针的拷贝,不改变指针的值和地址,但可以改变指针所指向的地址. 二.Java参数传递方法 Java提供的参数传递方法,很遗憾只有一种,按值传递.也就是说,方法得到的是所有参数值的一个拷贝

Python语言之变量1(数值,字符串,布尔)

1.数值 整数:2, -2 长整数:2**1024, 2**2048(真的可以很~长~~~,手残算了个2**100000,IDLE还真给打出来了,ORZ) 浮点数:7.05, 1E2(100.0), 2.3e4.5(invalid syntax) 复数:(1+2j), (1.2+3.4j), (1+1j)(j前面一定要有参数修饰,否则无法识别为复数) >>> aComplex = 1+2j >>> aComplex.real 1 >>> aComple

01.Java关键字,常量,变量,数值类型

2.1.关键字 1.用于定义访问权限修饰符的关键字:private ,protected ,public 1)private (私有的): private 关键字是访问控制修饰符,可以应用于类.方法或字段(在类中声明的变量). 只能在声明 private(内部)类.方法或字段的类中引用这些类.方法或字段.在类的外部或者对于子类而言,它们是不可见的. 所有类成员的默认访问范围都是 package 访问,也就是说,除非存在特定的访问控制修饰符,否则,可以从同一个包中的任何类访问类成员 2) prot

简单的交换两个变量的数值

//给定两个整数,利用交换函数交换两个数的内容#include <stdio.h>void swap(int *x,int *y);/*函数声明*/int main (){ int a; int b; printf("请分别输入a.b的值\n"); printf("a="); scanf("%d",&a); printf("b="); scanf("%d",&b); swap(&

awk的常用标变量和数值运算符

awk是Unix系统中的重要的支持正则表达式模式的处理文本处理工具,它即不像sed是基于一行行的处理文本数据,也不像grep一样只是匹配某一个字符串所在的行的数据,它处理文本数据是可以抓取到相应的字段的,要实现如此复杂的功能awk就有大量的内建函数.命令.变量.数组等等.awk还支持自定义变量,awk的内建变量一般用大写,而我们自定义的变量中一般全局变量第一个字母大写,局部变量全部小写,这个是我们一般的使用习惯.当然在Unix系统中awk还有衍生出其他相应的免费版本,如果你的系统是遵从FHS标准