shell脚本变量数值计算

1.算数运算符

执行算数运算就离不开各种运算符号,和其他编程语言一样,shell脚本也有运算符号。常见运算符号如下图所示:

上图中的运算符号常用于常见的运算命令,常用运算命令如下图所示:

2.双小括号“(())”运算命令

2.1 双小括号数值运算的基础语法

双小括号“(())”的作用是进行数值运算与数值比较,它的效率很高。

2.2 双小括号数值运算案例

案例1:利用“(())”进行简单的运算

[[email protected] ~]# echo $((2+4))
6
[[email protected] ~]# echo $((2+5))
7
[[email protected] ~]# echo $((2-5))
-3
[[email protected] ~]# ((i=4))
[[email protected] ~]# ((i=i*5))
[[email protected] ~]# echo $i
20

案例2:利用“(())”进行稍微复杂的总和运算

[[email protected] ~]# ((a=1+2**4-4%3))
[[email protected] ~]# echo $a
16
[[email protected] ~]# b=$((1+2**4-4%3))
[[email protected] ~]# echo $b
16
[[email protected] ~]# echo $((1+2**4-4%3))
16
[[email protected] ~]# a=$((100*(100+1)/2)) 利用数学公式计算1到100的和
[[email protected] ~]# echo $a
5050
[[email protected] ~]# echo $((100*(100+1)/2))
5050

案例3:利用“(())”双括号进行比较及判断

[[email protected] ~]# echo $((1>2))
0
[[email protected] ~]# echo $((1<2))
1
[[email protected] ~]# echo $((1==1))
1
[[email protected] ~]# if ((1<2&&1==1))
> then
> echo yes
> fi
yes

提示:双小括“(())”处理的运算必须是整数(整型),不能是浮点型(小数)或字符串。bc命令和awk命令可以用于浮点型(小数)运算。

案例4:在变量前后使用--和++特殊运算符的表达式

a++表示先输出a的值在进行自增运算(即a++相当于a=a+1)
[[email protected] ~]# a=10
[[email protected] ~]# echo $((a++))
10
[[email protected] ~]# echo $a
11
 ++a表示先进行自增运算,在输出a的值
[[email protected] ~]# a=10
[[email protected] ~]# echo $((++a))
11
[[email protected]ncheng ~]# echo $a
11
a--表示先输出a的值,再进行递减运算
[[email protected] ~]# a=10
[[email protected] ~]# echo $((a--))
10
[[email protected] ~]# echo $a
9
 --a表示先进行递减预算再输出a的值
[[email protected] ~]# a=10
[[email protected] ~]# echo $((--a))
9
[[email protected] ~]# echo $a
9

案例5:各种“(())”双中括号的运算的shell脚本示例

[[email protected] jiaobenlianxi]# cat shuzhijisuan.sh
#!/bin/bash
a=$1
b=$2

if [ $# -eq 2  ];then

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))"

else
echo $"Usage:Please enter two integers for example $0{2|1}"

fi

执行结果如下:

[[email protected] jiaobenlianxi]# sh shuzhijisuan.sh 2 1
a+b=3
a-b=1
a*b=2
a/b=2
a**b=2
a%b=0

3.let运算命令

let运算命令的语法格式为:let 赋值表达式

let赋值表达式的功能相当于:((赋值表达式))

范例1:给自变量加1

[[email protected] ~]# i=3
[[email protected] ~]# i=i+1  开头先不用let赋值
[[email protected] ~]# echo $i 输出时发现打印结果为i+1,没有计算
i+1
[[email protected] ~]# unset i
[[email protected] ~]# i=3
[[email protected] ~]# let i=i+1  采用let赋值在输出
[[email protected] ~]# echo $i
4

提示:let i=i+1相当于((i=i+1)),但双小括号的方式效率更高。

范例2:监控web服务状态,如果访问两次均失败,则报警。

[[email protected] scripts]# cat checkurl_let.sh
#!/bin/bash
function CheckUrl(){
timeout=5
fails=0
success=0
while true
do
wget --timeout=$timeout --tries=1 ww.baidu.cm -q -O /dev/null
if [ $? -ne 0 ];then
let fails=fails+1

else
let success+=1
fi
if [ $success -ge 1 ];then
echo success
exit 0
fi
if [ $fails -ge 2 ];then
Critical="sys is down.."
echo $Critical|mail -s "$Critical" [email protected]
exit 2
fi
done
}
CheckUrl

4.expr命令的用法

4.1 expr命令的基本用法示例

expr(evaluate expressions求职表达式)命令既可以用于整数运算,也可以用于相关字符串长度、匹配等的运算处理。

(1)expr用于计算

语法:expr Expression

范例1:expr运算命令用法

[[email protected] ~]# expr 1+1
1+1
[[email protected] ~]# expr 1 + 1
2
[[email protected] ~]# expr 1 - 1
0
[[email protected] ~]# expr 1 * 1
expr: syntax error
[[email protected] ~]# expr 1 \* 1
1
[[email protected] ~]# expr 1 / 1
1

提示:

1.运算符及用于计算的数字两端必须有空格,否则会有错误。

2.使用乘号时,必须用反斜线将其转义。

(2)expr配合变量计算

[[email protected] ~]# i=2
[[email protected] ~]# i=`expr $i + 1`
You have new mail in /var/spool/mail/root
[[email protected] ~]# echo $i
3

4.2 expr实战案例

(1)判断一个变量或字符串是否为整数的方法

可以利用expr做计算是变量或字符串必须是整数的规则,把一个变量或字符串和一个已知的整数(非0)相加,看命令返回值是否为0,如果为0就认为做加法的变量或字符串为整数,否则不是整数。

范例1:通过expr判断变量或字符串是否为整数

[[email protected] jiaobenlianxi]# i=4
[[email protected] jiaobenlianxi]# expr $i + 1 &>/dev/null
[[email protected] jiaobenlianxi]# echo $?
0
[[email protected] jiaobenlianxi]# i=asd
[[email protected] jiaobenlianxi]# expr $i + 1 &>/dev/null
[[email protected] jiaobenlianxi]# echo $?
2

范例2:通过read读入的方式持续等待输入,判断输入的值是否为整数

[[email protected] jiaobenlianxi]# cat read_expr.sh
#!/bin/bash
while true
do
read -p "pls input:" a
expr $a + 0 >/dev/null 2>&1
[ $? -eq 0 ] && echo int || echo chars
done

范例3:修改双小括号的案例5,要求能够判断输入的参数的个数和输入的参数是否为整数

[[email protected] jiaobenlianxi]# cat shuzhijisuan.sh
#!/bin/bash
a=$1
b=$2
expr $a + $b + 1 >/dev/null 2>&1
if [ $? -eq 0 -a $# -eq 2  ];then

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))"

else
echo $"Usage:Please enter two integers for example num1 num2"

fi

(2)expr判断文件扩展名是否符合要求

范例1:通过expr判断文件扩展名是否符合要求

[[email protected] jiaobenlianxi]# cat expr1.sh
#!/bin/bash

if expr "$1" : ".*\.txt" &>/dev/null

then
echo "you are using $1"
else
echo "pls use *.txt file"
fi

(3)通过expr计算字符串的长度

[[email protected] ~]# char="I am linzhongniao"
[[email protected] ~]# expr length "$char"
17
[[email protected] ~]# echo ${#char}
17
[[email protected] ~]# echo ${char}|wc -L
17
[[email protected] ~]# echo ${char}|awk ‘{print length($0)}‘
17

5.bc命令用法

bc是UNIX/Linux下的计算器,因此除了可以用作计算器来使用,还可以作为命令行计算工具使用。

范例1:bc命令做计算器使用

[[email protected] ~]# bc
bc 1.06.95
Copyright 1991-1994, 1997, 1998, 2000, 2004, 2006 Free Software Foundation, Inc.
This is free software with ABSOLUTELY NO WARRANTY.
For details type `warranty‘.
1+1
2

范例2:将bc用在命令行实现计算功能

[[email protected] ~]# echo 1+1|bc
2
[[email protected] ~]# echo 1.1+1|bc
 2.1
[[email protected] ~]# echo 6.2-1.1|bc
 5.1
[[email protected] ~]# echo "scale=6;355/113"|bc 使用scale保留六位小数
 3.141592
[[email protected] ~]# echo "scale=7;355/113"|bc
 3.1415929
[[email protected] ~]# i=2
[[email protected] ~]# i=`echo $i+6|bc`
[[email protected] ~]# echo $i
8

提示:整数运算可以用“(())”、let、expr等,如果是小数可以bc或awk,更推荐使用awk。

6.awk计算

awk计算使用小数和整数,特别是命令行计算,尤其是小数很精确,示例如下:

[[email protected] ~]# echo "2.3 4.5"|awk ‘{print ($1-$2)}‘
 -2.2  $1为第一个数字,$2为第二个数字用空格分开
[[email protected] ~]# echo "2.3 4.5"|awk ‘{print ($1+$2)}‘
 6.8
[[email protected] ~]# echo "2.3 4.5"|awk ‘{print ($1*$2)}‘
 10.35
[[email protected] ~]# echo "2.3 4.5"|awk ‘{print ($1/$2)}‘
 0.511111
[[email protected] ~]# echo "2.3 4.5"|awk ‘{print ($1+1)/$2}‘
 0.733333

7.declare命令的用法

[[email protected] ~]# declare -i a=16 b=7 -i参数可以将变量定义为×××
[[email protected] ~]# a=a+b
[[email protected] ~]# echo $a
23

8.$[ ]符号的运算示例

[[email protected] ~]# i=2
[[email protected] ~]# i=$[i+2]
[[email protected] ~]# echo $i
4
[[email protected] ~]# echo $[2+2]
4
[[email protected] ~]# echo $[2*2]
4
[[email protected] ~]# echo $[2/2]
1
[[email protected] ~]# declare  A=3 B=7
[[email protected] ~]# declare C=`expr $A + $B`
[[email protected] ~]# echo $C
10

9.基本shell变量输入read命令的运算实战

9.1 read命令基础

shell变量除了可以直接赋值和脚本传参外,还可以使用read命令从标准输入中获得。read为内置命令,可通过help read查看帮助。

语法格式:

read [参数] [变量名]

常用参数如下:

-p(prompt):设置提示信息

-t(timeout):设置输入等待的时间,单位默认为秒

范例1:read实现基本读入功能

[[email protected] ~]# read -p "pls input one number:" num
pls input one number:1
[[email protected] ~]# echo $num
1
[[email protected] ~]# read -p "pls input two number:" num1 num2
pls input two number:1 2
[[email protected] ~]# echo $num1
1
[[email protected] ~]# echo $num2
2

提示:read读入相当于交互式接收用户输入,然后给变量赋值

范例2:将“(())”双括号变量计算中的案例5改成read读入的方式

[[email protected] jiaobenlianxi]# cat shuzhijisuan.sh
#!/bin/bash
read -p "pls input two number:" a b
expr $a + $b + 1 >/dev/null 2>&1
if [ $? -eq 0 ];then

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))"

else
echo $"Usage:Please enter two integers for example num1 num2"

fi

原文地址:http://blog.51cto.com/10642812/2298549

时间: 2024-10-07 16:12:58

shell脚本变量数值计算的相关文章

linux学习之shell脚本 ------- 变量

[本文是自己学习所做笔记,欢迎转载,但请注明出处:http://blog.csdn.net/jesson20121020] 今天来看一下Shell中的一些变量. 变量类型: Shell中有以下几种变量: 1) 本地变量 2) 环境变量 3) 位置变量 4) 标准变量 5) 特殊变量 1) 本地变量 本地变量在用户现在的Shell生命周期的脚本中使用. 用法: variable-name=value set: 可以显示本地所有的变量 注意,本地变量如果加上readonly,则该本地变量不能被修改,

Shell脚本变量判断参数命令

系统变量 $n 传递给脚本或函数的参数.n 是一个数字,表示第几个参数.例如,第一个参数是$1,第二个参数是$2 $? 上个命令的退出状态,或函数的返回值.成功返回0,失败返回1 $# 传递给脚本或函数的参数个数 $* 所有这些参数都被双引号引住.若一个脚本接收两个参数,$*等于$1$2 $0 正在被执行命令的名字.对于shell脚本而言,这是被激活命令的路径 [email protected] 被双引号(” “)包含时,与 $* 稍有不同.若一个脚本接收到两个参数,[email protect

Linux mysql shell脚本 变量和环境变量 位置参数 预定义变量 运算符 判断 流程控制 for循环 与用户交互 函数

mysql 1. 卸载旧版本 rpm -qa | grep mysql 检查是否有旧版本 查询结果:mysql-libs-5.1.73-7.el6.x86_64 rpm -e mysql-libs 删除旧版本 rpm -e --nodeps mysql-libs 强行删除 2. 安装mysql 2.1 安装源码需要编译 下载c的编译工具 yum -y install make gcc-c++ cmake bison-devel ncurses-devel 2.2 xftp连接上传 xftp连接上

shell 脚本 变量 获取程序输出结果异常分析

#! /bin/bash pid=$(pgrep hello) echo ${pid} 脚本名称是 hello_test.sh 当hello进程存在时,总是返回两个值 当hello进程不存在时,返回值并不为空,总是返回一个值,多次运行,返回的值并不固定 当然,以上都不是期望的结果. 为什么不存在时,也会返回呢,并且返回值不一样,记得好像有一个内部变量记得上次shell进程的pid, 应该是这样. 经人提醒,脚本是不是也是hello.sh,终于恍然醒悟,脚本名是hello_test.sh,也包含h

Shell脚本变量定义

http://blog.csdn.net/qyf_5445/article/details/8886071 自定义变量bash中变量无类型区分aa=abc123    定义变量并赋值abc123aa=          定义空变量或者清空变量aa,但变量还存在export test="hello world"  设定环境变量testexport或者export -p        显示所有环境变量declare / typeset 选项 变量名declare 或 typeset 有同样

shell脚本变量和字符串截取

变量说明:$$ Shell本身的PID(ProcessID)$! Shell最后运行的后台Process的PID$? 最后运行的命令的结束代码(返回值)$- 使用Set命令设定的Flag一览$* 所有参数列表.如"$*"用「"」括起来的情况.以"$1 $2 - $n"的形式输出所有参数.[email protected] 所有参数列表.如"[email protected]"用「"」括起来的情况.以"$1″ &quo

shell脚本变量定义注意别跟系统变量重名了……

写了个很简单的脚本,执行结果却很奇怪.   1 #!/bin/bash 2 3 PATH=$HOME/vlc_transplant4 4 5 rm -f $PATH/vlc 6 ln -s $PATH/bin/vlc-static $PATH/vlc 执行结果: [email protected]:~/vlc_transplant4$ ./update.sh ./update.sh: 行 5: rm: 未找到命令 ./update.sh: 行 6: ln: 未找到命令 原因是自己在脚本中定义的P

《Linux命令行与shell脚本编程大全》 第六章环境变量

很多程序和脚本都通过环境变量来获取系统信息.存储临时数据和配置信息. 6.1 什么是环境变量: bash shell用一个叫环境变量(environment variable)的特性来存储有关shell会话和工作环境的信息. 这项特性允许在内存中存储数据,以便程序能轻松访问到它们. 在bash shell中,分两类: 全局变量:对于shell会话和所有生成的子shell都是可见的 局部变量:只对创建的它们的shell可见 6.1.1全局环境变量 查看全局变量,  $env    $printen

Shell脚本编程规范与变量

主要内容 Shell脚本编程规范 Shell脚本应用场景 Shell编程规范 管道与重定向 Shell脚本变量 自定义变量 特殊变量 Shell脚本概述 Shell脚本的概念 将要执行的命令按顺序保存到一个文本文件 给该文件可执行权限,便可运行 可结合各种Shell控制语句以完成更复杂的操作 Shell脚本应用场景 重复性操作 批量事务处理 自动化运维 服务运行状态监控 定时任务执行 编写第一个Shell脚本 1.编写脚本代码 使用vim文本编辑器,每行一条Linux命令, 按执行顺序依次编写: