shell变量的数值计算

算术运算符

shell中 常见的算术运算符号
算术运算符意义(*表示常用)
+、-加法(或正号)、减法(或负号)*
*、/、%乘法、除法、取余(取模)*
**幂运算*
++、–增加及减少,可前置也可放在变量结尾*
!、&&、||逻辑非(取反)、逻辑与(and)、逻辑或(or)*
<,<=、>、>=比较符号(小于、小于等于、大于、大于等于)
==、!=、=比较符号(相等、不相等,对于字符串“=”也可以表示相当于)*
<<、>>向左位移,向右位移
~、|、&、^按位取反、按位异或、按位与、按位或
=、+=、-=、*=、/=、%=赋值运算符,例如a+=1相当于a=a+1,a-=1相当于a=a-1 *
shell中常见的算术运算命令
运算操作符与运算命令意义
(())用于整数运算的常用运算符,效率很高
let用于整数运算,类似于“(())”
expr可用于整数运算,但还有很多其他的额外功能
bcLinux下的一个计算器程序(适合整数及小数运算)
$[]用于整数运算
awkawk即可以用于整数运算,也可以用于小数运算
declare定义变量值和属性,-i参数可以用于定义整形变量,做运算

双小括号“(())”数值运算命令

双小括号“(())”数值运算的基础语法

  双小括号“(())”的作用是进行数值运算与比较,它的效率很高,用法灵活,是企业场景运维人员经常采用的运算操作符。

运算操作符与运算命令意义
((i=i+1))此种书写方法为运算后赋值法,即将i+1的运算结果赋值给变量i。
注意,不能用“echo ((i=i+1))”的形式输出表达式的值,
但可以用echo $((i=i+1))输出其值
i=$((i+1))可以在“(())”前加$符,表示将表达式运算后赋值给i
((8>7&&5==5))可以进行比较操作,还可以加入逻辑与和逻辑或,用于条件判断
echo $((2+1))需要直接输出运算表达式的运算结果时,可以在“(())”前加$符
提示:
  “(())”表达式在命令执行时不需要加$符号,直接使用((6%2))形式即可,但是如果需要输出,就要加$符号,例如:echo $((6%2))
  “(())”里的所有字符之间没有空格、有一个或多个空格都不会影响结果。

let运算命令的用法

[sy@sy-pc ~]$ i=2
[sy@sy-pc ~]$ i=i+8   #<==假如开头不用let进行赋值
[sy@sy-pc ~]$ echo $i #<==输出结果为i+8,也就是没有计算i+8
[sy@sy-pc ~]$ unset i
[sy@sy-pc ~]$ i=2
[sy@sy-pc ~]$ let i=i+8  #<==采用let赋值后再输出
[sy@sy-pc ~]$ echo $i
[sy@sy-pc ~]$ 10
提示:
  let i=i+8等同于((i=i+8)),但后者效率更高。

expr命令的基本用法

  expr (evaluate(求值) expressions(表达式))命令既可以用于整数运算,也可以用于相关字符串长度、匹配等得运算处理。
1.expr用于计算
语法:expr Expression

[sy@sy-pc ~]$ expr 2 + 2
[sy@sy-pc ~]$ expr 2 - 2
[sy@sy-pc ~]$ expr 2 \* 2	#<==*号用\来转义。
[sy@sy-pc ~]$ expr 2 / 2

要注意,在使用expr时:

  • 运算符及用于计算的数字左右都至少有一个空格,否则会报错。
  • 使用乘号时,必须用反斜线屏蔽其特定含义,因为shell可能会误解星号的含义。

2.expr配合变量计算
  expr在shell中可配合变量进行计算,但需要用反引号将计算表达式括起来。

[sy@sy-pc ~]$ i=5
[sy@sy-pc ~]$ i=`expr $i + 6`	
#<==注意用反引号将表达式引起来,变量和数字符号两边要有空格
[sy@sy-pc ~]$ echo $i
[sy@sy-pc ~]$ 11

3.判断一个变量值或字符串是否为整数
  在shell编程里,由于函数库很少,所以判断字符串是否为整数就不是一件很容易的事情。
  利用以expr做计算时变量或字符串必须是整数的规则,把一个变量或字符串和一个已知的整数(非0)相加,看命令返回的值是否为0,如果是0,就认为做加法的变量或字符串为整数,否则就不是整数。

[sy@sy-pc ~]$ i=5		#<==赋值一个数5给i
[sy@sy-pc ~]$ expr $i + 6		#<==把i和整数相加
11
[sy@sy-pc ~]$ expr $i + 6 &>/dev/null	#<==表示不保留任何输出
[sy@sy-pc ~]$ echo $?		#<==输出返回值
0		#<==返回0,则证明i的值为整数
[sy@sy-pc ~]$ i=hello
[sy@sy-pc ~]$ expr $i + 6 &>/dev/null
[sy@sy-pc ~]$ echo $?
2		#<==返回为非0,则证明i的值不是整数

通过传参判断输出内容是否为整数。

#! /bin/bash
[ $# -ne 1 ] && { echo '请在文件名后面输入一个正整数';exit 1; } || {  }
expr $1 + 1 >/dev/null 2>&1
[ $? -eq 0 ] && echo int || echo chars
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值