shell编程基础(五)

linux运维菜鸟之旅2018-12-05 16:18:43

1.8 变量的数值计算

1.8.1 仅支持整数的运算

echo $((数学运算表达式))

# 形式一

[root@kai scripts]# echo $((1 + 1))

2

[root@kai scripts]# echo $((2*7-3/6+5))

19

# 形式二

[root@kai scripts]# ((kai=2*8))

[root@kai scripts]# echo $kai

16

# 形式三

[root@kai scripts]# znix=$((2*7-3/6+5))

[root@kai scripts]# echo $znix

19


延伸产物(重要)

i++ 自增1

i-- 自减1

++i

--i

         示例:

[root@kai scripts]# i=1

[root@kai scripts]# echo $((i++))

1

[root@kai scripts]# echo $((i++))

2

[root@kai scripts]# echo $((i--))

3

[root@kai scripts]# echo $((i--))

2

[root@kai scripts]# echo $((i--))

1

[root@kai scripts]# echo $((++i))

1

[root@kai scripts]# echo $((++i))

2

[root@kai scripts]# echo $((++i))

3

[root@kai scripts]# echo $((--i))

2

[root@kai scripts]# echo $((--i))

1

[root@kai scripts]# echo $((--i))

0

记忆方法:++--

变量a在前,表达式的值为a,然后a自增或自减,变量a在符号后,表达式值自增或自减,然后a值自增或自减。

let命令

[root@kai scripts]# i=1

[root@kai scripts]# i=i+1

[root@kai scripts]# echo $i

i+1

[root@kai scripts]# i=1

[root@kai scripts]# let i=i+1

[root@kai scripts]# echo $i

2


expr 命令

1.整数计算

2.判断扩展名

3.判断输入是否为整数,非整数返回值为2

4.计算变量的长度

[root@kai scripts]# expr 1+1

1+1

[root@kai scripts]# expr 1 + 1

2

[root@kai scripts]# expr 1 * 1expr: 语法错误

[root@kai scripts]# expr 1 \* 1

1

非整数返回值为2 示例:正常计算返回值为0表示正常,特殊情况:如果计算结果为0,那么返回值结果就为1

[root@kai scripts]# expr 1 + 1

2

[root@kai scripts]# echo $?

0

[root@kai scripts]# expr -1 + 1

0

[root@kai scripts]# echo $?

1

[root@kai scripts]# expr a + 1

expr: 非整数参数

[root@kai scripts]# echo $?

2


$[ ]运算符

[root@kai scripts]# echo $[1+2]

3

[root@kai scripts]# echo $[1-2]

-1

[root@kai scripts]# echo $[1*2]

2

[root@kai scripts]# echo $[1/2]

0


typeset命令进行运算

[root@kai scripts]# typeset -i A=2017 B=2018

[root@kai scripts]# A=A+B

[root@kai scripts]# echo $A

4035


1.8.2 可以进行小数运算的命令

bc    命令

# 安装 bc 依赖于base源

[root@kai scripts]# yum -y install bc

  交互模式测试bc命令

[root@kai scripts]# bc

bc 1.06.95

Copyright 1991-1994, 1997, 1998, 2000, 2004, 2006 Free Software Foundation, Inc.

1+1

2

[root@kai scripts]# echo 1+1.1|bc

2.1

免交互模式测试bc命令

小数保留6位:

[root@kai scripts]# echo 'scale=6;1/3'|bc

.333333


python 命令

[root@kai scripts]# file `which yum `

/usr/bin/yum: Python script, ASCII text executable

[root@kai scripts]# python

>>> import os

>>> os.system('df -h')

>>> 1+1.1

2.1

>>>exit()


awk 命令

[root@kai ~]# echo "7.7 3.8"|awk '{print ($1-$2)}'

3.9

[root@kai ~]# echo "358 113"|awk '{print ($1-3)/$2}'

3.14159

[root@kai ~]# echo "3 9"|awk '{print ($1+3)*$2}'

54

[root@backup scripts]# awk BEGIN'{print 1.2+3.3}'

4.5


1.8.3 运算相关练习题

1.8.3.1 【练习题】实现一个加减乘除等功能的计算器

实现脚本:

[root@kai scripts]# cat jishuanqi.sh

#!/bin/bash

#############################################################

# File Name: jishuanqi.sh

# Version: V1.0

# Author: kai

# Organization: http://blog.znix.top

# Created Time : 2017-12-06 08:57:13

# Description:

#############################################################

read -p "请输入第一个整数:" a

read -p "请输入第二个整数:" b

echo $a + $b =$(($a+$b))

echo $a - $b =$(($a-$b))

echo $a \* $b =$(($a*$b))

echo $a / $b =$(($a/$b))

         脚本执行过程:

[root@kai scripts]# sh jishuanqi.sh

请输入第一个整数:12

请输入第二个整数:12

12 + 12 =24

12 - 12 =0

12 * 12 =144

12 / 12 =1

精简方法

[root@kai scripts]# vim jishuanqi2.sh

#!/bin/bash

#############################################################

# File Name: jishuanqi2.sh

# Version: V1.0

# Author: kai

# Organization: http://blog.znix.top

# Created Time : 2017-12-06 15:02:41

# Description:

#############################################################

echo $(($1))

         脚本执行过程:

[root@kai scripts]# sh jishuanqi2.sh 1+1

2

[root@kai scripts]# sh jishuanqi2.sh 1*9

9


1.8.3.2 【练习题】打印结果1+2+3+4+5+6+7+8+9+10=55

脚本内容

sed -s "+"  :-s指定分割

[root@kai scripts]# vim yunshuan.sh

#!/bin/bash

#############################################################

# File Name: yunshuan.sh

# Version: V1.0

# Author: kai

# Organization: http://blog.znix.top

# Created Time : 2017-12-06 09:40:31

# Description:

#############################################################

Num=`seq -s + 1 10`

echo $Num=$(($Num))

for的写法:

#!/bin/bash

for i in {1..100}

do

 # ((sum=sum+i))

 #  sum=$(($sum+i))

   ((sum+=i))

done

echo $(seq -s "+" 100)=$sum

C的写法:

for((i=1;i<=100;i++))

do

    ((sum+=i))

done

while的写法:

#!/bin/bash

i=1

while ((i<=100))

do

((sum+=i))

((i+=1))

done

echo $(seq -s "+" 100)=$sum

脚本执行结果

[root@kai scripts]# sh yunshuan.sh

1+2+3+4+5+6+7+8+9+10=55


参考文档:

http://blog.csdn.net/lansesl2008/article/details/20558369

https://www.abcdocker.com/abcdocker/269

http://blog.51cto.com/life2death/1657133

http://blog.51cto.com/oldboy/1867160    #企业shell面试题


小伙伴们可以关注我的博客号:GeorgeKai,点击“阅读原文”进入

欢迎转发  ▶▶▶