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 (以字符串形式返回)

posted @ 2021-04-25 22:35  zfxd  阅读(290)  评论(0)    收藏  举报