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