摘自: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) —— 变量的数值计算实践的更多相关文章

  1. shell基础--变量的数值计算

    变量的数值计算 1.$((表达式)) (1).实验1 [root@~_~ day4]# cat test.sh #!/bin/bash a=6 b=2 echo "a-b=$(($a-$b) ...

  2. shell 变量的数值计算实践 expr

    expr(evaluate(求值)expressions(表达式))命令既可以用于整数运算,也可以用于相关字符串长度.匹配等的运算处理 expr 用做计算 必须有一个空格才会计算 [root@salt ...

  3. shell编程——变量的数值计算

    在shell脚本中,有时候会需要对数值类型的变量进行计算,通常我们用的是(()) [root@localhost collect]# ((a=1+2)) [root@localhost collect ...

  4. Shell特殊变量介绍与实践 $0

    2.$0特殊变量的作用及变量实践$0的作用为取出执行脚本的名称(包括路径) ,下面是该功能的实践.范例4-4:获取脚本的名称及路径. [root@salt-client- sh1]# cat n1.s ...

  5. shell下变量比较最佳实践

    https://stackoverflow.com/questions/13617843/unary-operator-expected If you know you're always going ...

  6. shell与变量的声明的操作

    1.给命令起别名:alias 执行下面命令后,可以使用dir代替ls –l 命令,显示目录中的文件详细信息: 还可以用一个别名表示几个命令 的结合: 2.ps:显示当前登录会话的所有活动进程: 3.更 ...

  7. shell之变量与read

    环境变量 set 环境变量可供shell以外的程序使用 shell变量 env shell变量仅供shell内部使用 set:显示(设置)shell变量 包括的私有变量以及用户变量,不同类的shell ...

  8. 【Linux】之shell特殊变量整理

    目录 1. 特殊变量列表 2. 特殊说明 在shell中变量名只能包含数字.字母和下划线,因为某些包含其他字符的变量有特殊含义,这样的变量被称为特殊变量. 例如,$ 表示当前Shell进程的ID,即p ...

  9. (转载)shell变量基础—shell自定义变量

    (转载)http://see.xidian.edu.cn/cpp/html/1494.html 一.Shell定义变量需要遵循的规则 Shell编程中,使用变量无需事先声明,同时变量名的命名须遵循如下 ...

随机推荐

  1. Merge:解析on子句和when not match子句的陷阱

    在细节上,体现编程的修养.每一位大师,master,其基础必定夯实.废话不多说,直接上干货,Merge子句用于对两个数据表执行数据同步,On子句指定匹配(when matched)条件,When子句指 ...

  2. [穷尽]ADO.NET连接字符串

    微软提供的四种数据库连接方式: System.Data.OleDb.OleDbConnection System.Data.SqlClient.SqlConnection System.Data.Od ...

  3. sudo apt-get update 去除设置的代理

    今天想装个软件(wine),使用 sudo apt-get update 命令时,发现给出很多Ign 语句,总出现 Connecting to proxy.http://10.0.126.1:1312 ...

  4. VS2010带不出System.Data.OracleClient这个引用的解决方案

    在使用VS2010的时候有时会带不出System.Data.OracleClient这个引用,可以使用以下解决方法: 右击项目的属性,在弹出窗口中有一个“目标框架”下拉框选项,默认会是.NET FRA ...

  5. ubuntu server安装OVS

    安装 Open vSwitch (Ubuntu Server 16.04)  1.查看主机系统内核版本:uname –a 2.上传openvswitch软件包,解压后执行安装: 更新下载源 $ sud ...

  6. VRP基础及操作

    VRP基础及操作 前言 通用路由平台VRP(Versatile Routing Platform)是华为公司数据通信产品的通用操作系统平台,它以IP业务为核心,采用组件化的体系结构,在实现丰富功能特性 ...

  7. 云平台项目--学习经验--回调函数中call和apply

    Js中可以通过call和apply来代替另一个对象调用一个方法,将一个函数对象上下文从初始上下文改变为thisObj指定的新对象.简而言之,改变函数执行的上下文,而call和apply的基本区别在于他 ...

  8. php内置函数分析之str_pad()

    PHP_FUNCTION(str_pad) { /* Input arguments */ zend_string *input; /* Input string 输入字符串*/ zend_long ...

  9. 用node编写cli工具

    cli是command-line interface的缩写,即命令行工具,常用的vue-cli, create-react-app, express-generator 等都是cli工具. 本文以自己 ...

  10. Jenkins配置项目构建后的钉钉通知

    首先在任意一个钉钉群里创建自定义的钉钉机器人,然后能够看到钉钉开放的webhook 复制webhook Jenkins中安装钉钉插件,然后在项目的配置当中,构建后操作里添加钉钉报警 url一般默认已经 ...