expr命令
优点:可以直接输出
缺点:计算表达式里面引用变量使用$,特数字符需要转义 只能计算一个表达式
计算 expr \( 10 + 10 \) \* 2 + 100
计算字符串长度 expr length 字符串
截取字符串 expr substr 字符串 start end
获取第某字符在字符串中出现的位置
expr index 被查找字符串 要查找的字符
正则表达式1 expr match 字符串 正则表达式 expr match "itheima" ".*m"
正则表达式2 expr 字符串 :正则表达式 expr "itheima" : ".*m"
(()用法
优点:直接输出,直接使用变量名,特殊字符无需转义,多个表达式赋值
缺点:需要获取值以后才可以输出
括号内赋值
# 计算1+6赋值给变量a
((a=1+6))
# 计算变量a-1赋值给变量b
((b=a-1))
# 计算变量a+变量b赋值给变量c
((c=a+b))
# 打印变量a,变量b, 变量c的值
echo "a=${a},b=${b},c=${c}"
括号外赋值
# $赋值写法
a=$((1+6)) b=$((a-1)) c=$((a+b))
多表达式赋值
# (())多个表达式计算赋值
((a=1+6,b=a-1,c=a+b))
echo "a=${a},b=${b},c=${c}"
# echo输出直接使用(())
echo "1+6=$((1+6))"
与if条件配合使用
# (()) 用于逻辑表达式 在if中使用
if ((a>7 && b==c))
then
echo "a>7 && b==c 成立"
else
echo "a>7 && b==c 不成立"
fi
let数字计算
优点:赋值简单
缺点:不能直接输出
用于赋值,最简洁的整数运算赋值命令
# 计算变量a-1赋值给变量b
let a=1+6
let b=a-1
# 计算变量a+变量b赋值给变量c
let c=a+b
# 打印变量a,变量b, 变量c的值
echo "a=${a},b=${b},c=${c}"
# let多个表达式计算赋值
let a=1+6 b=a-1 c=a+b
echo "a=${a},b=${b},c=${c}"
$[ ]用法
优点:特殊字符无需转义
缺点:不能多表达式计算
# 计算1+6赋值给变量a
a=$[1+6] echo $a
# 计算变量a-1赋值给变量b
b=$[a-1] echo $b
# 计算变量a+变量b赋值给变量c
c=$[a+b] echo $c
# 打印变量a,变量b, 变量c的值
echo "a=${a},b=${b},c=${c}"
# 直接输出
echo "$[1+6],$[7-1],$[7+6]"
bc计算器
bc命令是一个任意精度计算器
语法:bc [-options]
-p 不显示欢迎信息 -l 使用标准数学库 quit 退出bc
bc中进行互动式运算:
bc -p 进入bc环境 直接输入算数表达式 回车 计算结果
shell中进行非互动式的bc管道运算
直接输出结果:echo "bc表达式" | bc [-options]
赋值给变量:变量名=$(echo "bc表达式" | bc [-options])
shell中非互动式的输入重定向bc运算
变量名=$(bc [-options] << EOF
bc表达式
EOF
)
EOF..EOF
输入流的多行表达式
含义: 将EOF中间多行表达式输入给到bc去执行, 再将bc执行的结果给到Shell变量