远方

(()) 和 bc、算术运算expr、关系、布尔、字符串运算

Linux

算术运算符 (( )) 

双小括号 (( )) 是 Bash Shell 中专门用来进行整数运算的命令

注意:(( )) 只能进行整数运算,不能对小数(浮点数)或者字符串进行运算。

表达式可以只有一个,也可以有多个,多个表达式之间以逗号,分隔。

使用$获取 (( )) 命令的结果,这和使用$获得变量值是类似的。


((a=10+66)

((b=a-15))

计算完成后给变量赋值。

注意,使用变量时不用加$前缀,(( )) 会自动解析变量名


a=$((10+66)

b=$((a-15))

在 (( )) 前面加上$符号获取 (( )) 命令的执行结果

b=((a-15)) 这样的写法是错误的

((a>7 && b==c)) # 进行逻辑运算,在 if 语句中常会使用逻辑运算

echo $((a+10)) # 立即输出结果。 前面加$

((a=3+5, b=a+10)) # 对多个表达式同时进行计算

i=5; ((i=i*2)) # 可写为 ((i*=2))

echo $((--i)) # 自减

echo $((i++)) # 自增

c=$((4+8, i+9)) # 以最后一个表达式的结果作为整个(())命令的执行结果

echo $((a=1+2**3-5%3))

echo $((8<3)) # 逻辑运算,返回1

echo $((8==8))


if ((8>7&&5==5));then

    echo yes

fi


let 命令

let 命令和双小括号 (( )) 的用法是类似的,它们都是用来对整数进行运算.(也只能进行整数运算)

let i+=8

let a+=6 c=a+b  #多个表达式以空格为分隔


bc命令

bc命令可以很方便的进行浮点运算。

+ - * / ^ %

echo "1.212*3" | bc  # 3.636

echo "scale=2;3/8" | bc #  0.37 。 参数scale=2是将bc输出结果的小数位设置为2位。默认保留0位

abc=365; echo "obase=2;$abc" | bc # 结果为:101101101。将十进制转换成二进制。ibase是输入的进制,obase是输出的进制,默认是十进制

abc=101101110;echo "ibase=2;$abc" | bc # 结果为:366,这是用bc将二进制转换为十进制

echo "10^10" | bc # 10000000000 。平方

echo "scale=5;sqrt(1000)" | bc # 31.62277 平方根


交互模式

shell下直接输入bc进入程序的交互模式,可scale=5设置精度

如果要使用强大的内置数学库,需要加上-l参数

bc -l -q

4/3                           /*未指定精度默认保留整数*/

1

scale=5                   /*指定精度为5*/

4/3

1.33333


expr命令

expr命令是一个手工命令行计数器,用于在UNIX/LINUX下求表达式变量的值,一般用于整数值,也可用于字符串。

expr length "my test" # 计算字串长度:7

expr substr  "my test" 2 5 # 截取字符串:y tes

expr index   "my test" t # 第一个t出现的位置:4

expr 14 % 9 # 余数:5

expr 10 + 10 # 20

expr 30 / 3 / 2 # 5

expr 30 \* 3  # 使用乘号时,必须用反斜线屏蔽其特定含义

expr 30 * 3 # 错误 expr: Syntax error


#!/bin/bash

val=`expr 3 + 8`

echo "SubValue : $val"

运算符和表达式之间必须有空格,例如2+2是不正确的


[ $a == $b ]  # [$a==$b] 是不正确的。要有空格

[ $a != $b ] 



关系运算符:返回 true 或 false

[ $a -eq $b ] #  equal

[ $a -ne $b ] #  not equal

[ $a -gt $b ] # greater than >

[ $a -lt $b ] # less than <

[ $a -ge $b ] # greater than or equal >=

[ $a -le $b ] #  less than or equal <=

注意:[$a <= $b]是不正确的(条件式放在方括号内,且要有空格)


布尔运算:(与或非)

[ $a -lt 20 -a $b -gt 100 ] -a 与运算AND

[ $a -lt 20 -o $b -gt 100 ] -o 或运算OR

[ ! false ] is true.!非运算


字符串运算

a="abc";b="edf"

[ $a = $b ] is not true.

[ $a != $b ] is true.

[ -z $a ] is not true.

[ -z $a ] is not false.

[ $a ] is not false.


========================================================

dc是压栈操作。 (desk calculator)

dc 命令结构如同一个堆栈、逆波兰表示法计算。

3

2+

p

5

4*

p

20


echo "4 3 * 2 + 1 -p"|dc #算式是:(4 * 3 + 2 - 1)

发表评论:

◎欢迎参与讨论,请在这里发表您的看法、交流您的观点。

Catalog
标签列表
最新
最热
常用网站
站点信息
  • 文章总数:2605
  • 页面总数:1
  • 分类总数:21
  • 标签总数:668
  • 评论总数:6
  • 浏览总数:3464920
Archives
Copyright © 2017-2023 WWW.MY889.COM All Rights Reserved.
推荐使用 Chrome 浏览器浏览本站
沪ICP备17052342号-1
Sitemap XML