Shell计算命令(expr,(()),let,$[],bc)
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
正则表达式匹配:匹配返回长度,不匹配返回0(.:代表任意字符,*:代表0到多个)
expr match "tifmhh" ".*m" =>4
expr "tifmhh" : ".*m" =>4
(()):整数运算,比较运算符时不建议使用
//可以直接使用变量名,特殊字符不需要转义,可以多个表达式赋值
括号内赋值:((a=1+5)) ((c=a+1))
括号外赋值:a=$((1+6))
多表达式赋值:((a=1+6,b=a-1,c=a+b))
输出:echo "a=$((a))" echo "b=${b}"
逻辑运算表达式,在if中使用:
if ((a>7 && b==c))
then
echo " a>7 && b==c成立"
else
echo " a>7 && b==c不成立"
fi
let:适合赋值(整数计算)
//特殊字符不需要转义,
单个赋值:let a=1+6 多个赋值:let a=1+6 b=a-1
$[ ]:整数运算,只能对单个表达式的计算求值与输出
//表达式内部不可以直接赋值给变量,特殊字符不需要转义,不能多表达式计算
a=$[1+6]
bc:计算器
参数:
-l:使用内置函数时
-q:不显示欢迎信息
//bc执行计算任务的文件(结果不能放到shell中)
task.txt
108*76+1245
57+4748*34
命令:bc -q task.txt
结果:省略
quit
内置变量:
scale:指定精度
ibase:指定输入的进制类型 obase:指定输出的进制类型
last或者.:获取最近计算打印结果的数字
内置数学函数:s(x) c(x) e(x) .......
在bc中互动式的数学运算:(进入bc环境)
bc -q
1+1
=>2
1.1+2
=>3.1
scale=2;10/3
=>3.33
obase=2; 7
=>111
quit
bc -q
ibase=2;111
7
quit
bc -ql
e(2)
=>省略
quit
在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
=>4
//将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
第一行表达式
第二行表达式
......
EOF
)
b=`bc -l << EOF
1+1
3+3
EOF
`
echo $b
=>2 6 (以字符串形式返回)
b=$(bc -l << EOF
1+1
3+3
EOF
)
echo $b
=>2 6 (以字符串形式返回)

浙公网安备 33010602011771号