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编程中,使用变量无需事先声明,同时变量名的命名须遵循如下 ...
随机推荐
- 我是SPI,我让框架更加优雅了!
文章首发于[陈树义的博客],点击跳转到原文<我是 SPI,我让框架更加优雅了!> 自从上次小黑进入公司的架构组之后,小黑就承担起整个公司底层框架的开发工作.就在刚刚,小黑又接到一个任务:做 ...
- Docker_容器化jenkins
Docker部署接口自动化持续集成环境第二步,容器化一个Jenkins! 接上文:Docker_容器化gitlab 1:pull一个jenkins镜像 docker pull jenkins 2:查看 ...
- centos 7 tomcat 开机自启
第一章 1.将tomcat加入开启自己,以减少手动启动的麻烦 环境配置需要提前配置好.(我这里已经是不做操作了) 192.168.1.195 jdk1.8 + tomcat 8 第二章 2.编写to ...
- 将WebService部署到 SharePoint 2010 gac 缓存中,并用Log4Net记录日志到数据库
最近做了一个sharePoint项目,需要实现的功能是,第三方网站访问我们sharePoint中的数据,通过Webservice方式实现文件的上传和下载. 于是代码工作完成了之后,本地调试没什么问题, ...
- python-两个图片相似度算法
# -*- coding: UTF-8 -*- """ 作者:zxj 版本:1.0 日期:19-3-24 """ import cv2 im ...
- mybatis mapper使用记录
insert://插入一条数据//支持Oracle序列,UUID,类似Mysql的INDENTITY自动增长(自动回写)//优先使用传入的参数值,参数值空时,才会使用序列.UUID,自动增长int i ...
- IDA Pro 在CSAPP lab2中的使用
在做lab2的时候,偶然的情况下,发现了IDA pro这样一个反汇编工具,总的来说对于lab2这样的小实验读懂代码的大体功能是有作用的,但对于想要具体明白某一条指令的执行过程,又显得不足,到最后还是需 ...
- BugPhobia开发篇章:Beta阶段第III次Scrum Meeting
0x01 :Scrum Meeting基本摘要 Beta阶段第三次Scrum Meeting 敏捷开发起始时间 2015/12/15 00:00 A.M. 敏捷开发终止时间 2015/12/15 23 ...
- kubectl 命令记录 转帖自: https://www.kubernetes.org.cn/doc-45
kubectl annotate – 更新资源的注解. kubectl api-versions – 以“组/版本”的格式输出服务端支持的API版本. kubectl apply – 通过文件名或控制 ...
- array_pop()方法
array_pop — 将数组最后一个单元弹出(出栈) 说明 mixed array_pop ( array &$array ) array_pop() 弹出并返回 array 数组的最后一个 ...