天天看点

Shell计算命令

expr :

整数计算

expr \( 10 + 10 \) \* 2 + 100

//赋值

result=`expr \( 10 + 10 \) \* 2 + 100`

字符串操作

计算字符串长度:expr length "acbdd" => 5

截取字符串:expr substr "abcd" 1 2 => ab

截取第一个字符出现的位置:expr index "abcd" c => 3

正则表达式匹配:expr match "tifmhh" ".*m" =>4

                        expr "tifmhh" : ".*m" =>4

(()):适合用于整数计算方面,比较运算符时不建议使用

//使用$(())可以获取计算结果

括号内赋值:((a=1+5)) ((c=a+b))

括号外赋值:a=$((1+6)) ((a=1+6,b=a-1,c=a+b))

进行条件判断:if ((整数表达式))

let:赋值(适合用于赋值)

let a=1+6 let a=1+6 b=a-1

$[ ]:整数运算(只能对单个表达式的计算求值与输出)

//表达式内部不可以赋值给变量

a=$[1+6]

bc:计算器(任意精度)

参数:

-l:使用内置函数时

-q:不显示欢迎信息

task.txt

108*76+1245

57+4748*34

//bc执行计算任务的文件(结果不能放到shell中)

bc -q task.txt

内置变量:

scale:指定精度 

ibase:指定输入的进制类型。obase:指定输出的进制类型

last或者.:获取最近计算打印结果的数字

在bc中互动式的数学运算:(进入bc环境)

bc -q

1+1

2

1.1+2

3.1

scale=2;10/3

3.33

obase=2; 7

111

quit

ibase=2;111

7

bc -ql

e(2)

在shell中进行非互动式的bc管道运算:(可以与shell编程结合)

// expression表达式必须符合bc命令要求的公式

// expression表达式里面可以引用shell变量

//直接进行bc的表达式计算输出

echo "expression" | bc [options]

echo "1+1" | bc 

=>2

echo "scale=2;10/3" | bc 

=>3.33

echo "e(2)" | bc -l

a=2

echo "b=$a+2;b" | bc

//将bc计算结果赋值给shell变量

var_name=`echo "expression" | bc [options]`

var_name=$(echo "expression" | bc [options])

` ` :所有linux系统支持,兼容性好,容易与引号产生混淆

$():不是所有linux系统都支持 ,兼容性差,但是不容易混淆

b=$(echo "1+1" | bc)

b=`echo "1+2" | bc`

在shell中非互动式的输入重定向bc运算:(可以输入多行表达式)

//以流的方式输入

var_name = `bc [optionss] << EOF

       第一行表达式

       第二行表达式

       ......

EOF

`

var_name=$( bc [optionss] << EOF

)

b=`bc -l << EOF

       1+1

       3+3

echo $b

=>2 6 (以字符串形式返回)

b=$(bc -l << EOF