SHELL (4) —— 变量的数值计算实践
摘自:Oldboy Linux运维——SHELL编程实战
利用(())双括号进行比较及判断:
[root@yeebian ~]# echo $((3<8))
1 #1表示真。
[root@yeebian ~]# echo $((8<3))
0 #0表示假。
[root@yeebian ~]# echo $((8==8))
1
[root@yeebian ~]# if ((8>7&&5==5))
> then
> echo yes
> fi
yes
上面涉及的数字及变量必须为整数(整型),不能是小数(浮点数)或字符串。
在变量前后使用--和++特殊运算符的表达式。
[root@yeebian ~]# a=10
[root@yeebian ~]# echo $((a++))
10
[root@yeebian ~]# echo $a
11
[root@yeebian ~]# a=11
[root@yeebian ~]# echo $((a--))
11
[root@yeebian ~]# echo $a
10
[root@yeebian ~]# a=10
[root@yeebian ~]# echo $a
10
[root@yeebian ~]# echo $((--a))
9
[root@yeebian ~]# echo $a
9
[root@yeebian ~]# echo $((++a))
10
[root@yeebian ~]# echo $a
10
有关++、--运算的记忆方法:
变量a在运算符之前,输出表达式的值为a,然后a自增或自减;变量a在运算符之后,输出表达式会先自增或自减,表达式的值就是自增或自减后a的值。
各种(())运算的Shell脚本示例。
[root@yeebian ~]# vim test.sh
testchars
#!/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))"
[root@yeebian ~]# bash test.sh
a-b=4
a+b=8
a*b=12
a/b=3
a**b=36
a%b=0
由此延伸的脚本:
[root@yeebian ~]# vim test.sh
#!/bin/bash
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))"
[root@yeebian ~]# bash test.sh 10 5
a-b=5
a+b=15
a*b=50
a/b=2
a**b=100000
a%b=0
计算字符串长度:
[root@yeebian ~]# char="I am studying Shell."
[root@yeebian ~]# expr length "$char"
20
[root@yeebian tmp]# echo ${#char}
20
[root@yeebian tmp]# echo $char | wc -L
20
[root@yeebian tmp]# echo $char | awk '{print length($0)}'
20
其中echo ${#char}这种方式是最快的。
expr实践
判断参数个数是否为2,若不是,则给出提示终止运行;
判断传入的参数是否为整数,若不是,则给出提示终止运行;
做运算。
[root@yeebian vurtne]# vim shell.sh
#!/bin/bash
[ $# -ne 2 ]&&{
echo $"USAGE $0 NUM1 NUM2"
exit 1
}
a=$1
b=$2
expr $a + $b + 110 &>/dev/null
if [ $? -ne 0 ]
then
echo "You must input two nums."
exit 2
fi
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))"
[root@yeebian vurtne]# bash shell.sh 1 q
You must input two nums.
[root@yeebian vurtne]# bash shell.sh 0
USAGE shell.sh NUM1 NUM2
[root@yeebian vurtne]# bash shell.sh 8 2
a-b=6
a+b=10
a*b=16
a/b=4
a%b=0
a**b=64
通过一条命令计算输出1+2+3+...+10的表达式,并计算结果:
[root@yeebian ~]# echo `seq -s '+' 10` = `seq -s "+" 10 | bc`
1+2+3+4+5+6+7+8+9+10 = 55
[root@yeebian ~]# echo "`seq -s '+' 10` = "$((`seq -s "+" 10`))
1+2+3+4+5+6+7+8+9+10 = 55
[root@yeebian ~]# echo `seq -s '+' 10` = `seq -s " + " 10 | xargs expr`
1+2+3+4+5+6+7+8+9+10 = 55
[root@yeebian ~]# echo `seq -s "+" 10` = $(echo $[`seq -s "+" 10`])
1+2+3+4+5+6+7+8+9+10 = 55
awk计算
[root@yeebian ~]# echo "7.7 3.8" | awk '{print ($1-$2)}'
3.9
[root@yeebian ~]# echo "358 113" | awk '{print ($1-3)/$2}'
3.14159
[root@yeebian ~]# echo "3 9" | awk '{print ($1+3)*$2}'
54
read命令实践
[root@yeebian vurtne]# vim shell.sh
#!/bin/bash
read -p "Please input two num:" a b
[ ${#a} -le 0 ]&&{
echo "The first num is null"
exit 1
}
[ ${#b} -le 0 ]&&{
echo "The second 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,please input again."
exit 1
fi
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))"
[root@yeebian vurtne]# bash shell.sh
Please input two num:1 qq
One of the num is not num,please input again.
[root@yeebian vurtne]# bash shell.sh
Please input two num:qq
The second num is null
[root@yeebian vurtne]# bash shell.sh
Please input two num:5
The second num is null
[root@yeebian vurtne]# bash shell.sh
Please input two num:5 6 7
One of the num is not num,please input again.
[root@yeebian vurtne]# bash shell.sh
Please input two num:5 7
a-b=-2
a+b=12
a*b=35
a/b=0
a%b=5
a**b=78125
SHELL (4) —— 变量的数值计算实践的更多相关文章
- shell基础--变量的数值计算
变量的数值计算 1.$((表达式)) (1).实验1 [root@~_~ day4]# cat test.sh #!/bin/bash a=6 b=2 echo "a-b=$(($a-$b) ...
- shell 变量的数值计算实践 expr
expr(evaluate(求值)expressions(表达式))命令既可以用于整数运算,也可以用于相关字符串长度.匹配等的运算处理 expr 用做计算 必须有一个空格才会计算 [root@salt ...
- shell编程——变量的数值计算
在shell脚本中,有时候会需要对数值类型的变量进行计算,通常我们用的是(()) [root@localhost collect]# ((a=1+2)) [root@localhost collect ...
- Shell特殊变量介绍与实践 $0
2.$0特殊变量的作用及变量实践$0的作用为取出执行脚本的名称(包括路径) ,下面是该功能的实践.范例4-4:获取脚本的名称及路径. [root@salt-client- sh1]# cat n1.s ...
- shell下变量比较最佳实践
https://stackoverflow.com/questions/13617843/unary-operator-expected If you know you're always going ...
- shell与变量的声明的操作
1.给命令起别名:alias 执行下面命令后,可以使用dir代替ls –l 命令,显示目录中的文件详细信息: 还可以用一个别名表示几个命令 的结合: 2.ps:显示当前登录会话的所有活动进程: 3.更 ...
- shell之变量与read
环境变量 set 环境变量可供shell以外的程序使用 shell变量 env shell变量仅供shell内部使用 set:显示(设置)shell变量 包括的私有变量以及用户变量,不同类的shell ...
- 【Linux】之shell特殊变量整理
目录 1. 特殊变量列表 2. 特殊说明 在shell中变量名只能包含数字.字母和下划线,因为某些包含其他字符的变量有特殊含义,这样的变量被称为特殊变量. 例如,$ 表示当前Shell进程的ID,即p ...
- (转载)shell变量基础—shell自定义变量
(转载)http://see.xidian.edu.cn/cpp/html/1494.html 一.Shell定义变量需要遵循的规则 Shell编程中,使用变量无需事先声明,同时变量名的命名须遵循如下 ...
随机推荐
- REST-framework快速构建API--四部曲
代码目录结构: 一.使用原生APIView 使用rest-framework原生的APIView实现过程: 以url(r'^books/$', views.BookView.as_view(),nam ...
- 移动端三合一瀑布流插件(原生JS)
没有前言,先上DEMO(手机上看效果更佳)和 原码. 瀑布流形式的图片布局方式在手机等移动端设备上运用广泛,比较常见的是下面前两种: 一.等宽等高 这种形式实现起来非常容易,这里就不再多说. 二.等宽 ...
- 使用Fidder从安卓模拟器获取APP内H5游戏网址
大家都知道H5游戏其实是网页,但是有些APP或者微端不显示网址链接.这里给大家介绍介绍一种,利用Fiddler进行抓包,获取APP打开的网址的方法.有人说何必多此一举呢,直接用模拟器玩游戏就好了.的确 ...
- Python初学者随笔Week1
Python从入门到放弃 本文主要是描述的是作为初学者对python学习的过程与经历分享,包括一些历程的分享与重要的时间节点记录,对于python学习的笔记与心得. 如果你也是初学者,我们可以一起学习 ...
- 三丰云使用记录--部署iis服务器
写在前面的话:看在我这么热心写使用推广记录,麻烦延长下使用天数,谢谢 官网地址:https://www.sanfengyun.com 三丰云是北京太极三丰云计算有限公司旗下网络服务品牌,十八年IDC ...
- Codeforces Round #546 (Div. 2) E - Nastya Hasn't Written a Legend
这题是一个贼搞人的线段树 线段树维护的是 区间和a[i - j] 首先对于update的位置可以二分查找 其次update时候的lazy比较技巧 比如更新的是 l-r段,增加的是c 那么这段的值为: ...
- 11.5 Daily Scrum
请把现在当成11月5日······ Today's tasks Tomorrow's tasks 丁辛 餐厅列表数据结构设计 餐厅列表UI设计 李承晗 ...
- Teechart使用记录
一. Chart 1.1 Series 在该界面可以进行曲线的添加.删除.修改 1.2 General 在该界面 Margins 可以设置整个坐标系外边距. 在这里可是设置放大功能. All ...
- 实训一(cocos2d-x相关)
实训内容简介: 大四开始前系里安排的的集中实践环节,根据要求,开发app应用软件. 目标app:Stick_mxj 目的:继续对cocos2d-x的学习,完成实践环节,解决现在对引擎不是很清楚的一些问 ...
- 浅谈FPGA
浅谈FPGA 前言 生活中永远都不会缺少「 为什么 」,于最近就被合胜学长了,问了一个看似简单却又极具意义的问题,为什么需要FPGA?FPGA与单片机的区别是什么?瞬间刷新了我入门三天FPGA的冲击感 ...