linux shell expr除以0,shell脚本快速入门之expr语法和算术运算

shell脚本之expr语法和算术运算

题记:感觉ksh和bash语法差不多,csh同C语言语法相似

二、expr

语法:用来计算表达式的值

注释:expr的每个参数之间必须用空格分隔,特殊字符需转义

分类:

1、逻辑表达求值

1)ARG1 | ARG2

注释:ARG1既不为空也不为0时,取ARG1的值,否则取ARG2的值

示例:

linux-mdcc:~ # expr 1 \| 2

1

linux-mdcc:~ # expr 1 \| 0

1

linux-mdcc:~ # expr 0 \| 2

2

linux-mdcc:~ # expr 0 \| 0

0

2)ARG1 & ARG2

注释:ARG1并且ARG2既不为空也不为0时取ARG1的值,否则取值0

示例:

linux-mdcc:~ # expr 1 \& 2

1

linux-mdcc:~ # expr 0 \& 2

0

linux-mdcc:~ # expr 2 \& 0

0

linux-mdcc:~ # expr 0 \& 0

0

3)ARG1 < ARG2

注释:ARG1 小于ARG2时为真,取值1

示例:

linux-mdcc:~ # expr 0 \< 1

1

linux-mdcc:~ # expr 0 \>= 1

0

4)ARG1 <= ARG2

注释:ARG1 小于或等于ARG2时为真,取值1

示例:

linux-mdcc:~ # expr 0 \<= 1

1

linux-mdcc:~ # expr 1 \<= 1

1

linux-mdcc:~ # expr 0 \> 0

0

5)ARG1 = ARG2

注释:ARG1 等于ARG2时为真,取值1

示例:

linux-mdcc:~ # expr 1 \= 1

1

linux-mdcc:~ # expr 2 \= 1

0

linux-mdcc:~ # expr 1 \!= 1

0

6)ARG1 != ARG2

注释:ARG1 不等于ARG2时为真,取值1

示例:

linux-mdcc:~ # expr 1 != 2

1

linux-mdcc:~ # expr 1 != 1

0

7)ARG1 >= ARG2

注释:ARG1 大于或等于ARG2时为真,取值1

示例:

linux-mdcc:~ # expr 2 \>= 1

1

linux-mdcc:~ # expr 1 \>= 1

1

linux-mdcc:~ # expr 0 \>= 1

0

8)ARG1 > ARG2

注释:ARG1 大于ARG2时为真,取值1

示例:

linux-mdcc:~ # expr 1 \> 0

1

linux-mdcc:~ # expr 0 \> 1

0

linux-mdcc:~ # expr 1 \> 1

0

2、数学表达式求值

9)ARG1 + ARG2

注释:加法运算

示例:

linux-mdcc:~ # expr 1 + 1

2

10)ARG1 - ARG2

注释:减法运算

示例:

linux-mdcc:~ # expr 3 - 1

2

11)ARG1 * ARG2

注释:乘法运算

示例:

linux-mdcc:~ # expr 2 \* 4

8

12)ARG1 / ARG2

注释:除法运算

示例:linux-mdcc:~ # expr 8 \/ 2

4

13)ARG1 % ARG2

注释:求余运算

示例:

linux-mdcc:~ # expr 8 % 3

2

3、字符表达式求值

14)string : REGEXP

注释:string 匹配到REGEXP时为真,取值为1

示例:

linux-mdcc:~ # expr aaaaAAAA \: [a-zA-Z].*

8

15)match STRING REGEXP

注释:同string : REGEXP

示例:

linux-mdcc:~ # expr match aaaaAAAA [a-zA-z].*

8

16)substr STRING POS LENGTH

注释:截取STRING ,从POS位置截取长度为LENGTH的子串

示例:

linux-mdcc:~ # expr substr strings 2 3

tri

17)index STRING CHARS

注释:取出CHARS在STRING 中的索引,如果没找到,值为0;这个命令的结果不是很准确

示例:

linux-mdcc:~ # expr index abcdefghijk bc

2

18)length STRING

注释:字符串的长度

示例:

linux-mdcc:~ # expr length adfasfaf

8

19)+ TOKEN

注释:字符串连接符,限于个人理解

示例:

linux-mdcc:~ # expr 1+1

1+1

linux-mdcc:~ # expr + match

match

linux-mdcc:~ # expr + /

/

结束语:一直觉得expr不是很好用,好在各种Shell也有自己的运算方法

三、算术运算

1、Bourne shell

1)整数运算

注释:没有内置算术运算,使用expr命令进行简单的整数算术运算

示例:

wsnjc-2268:~ # expr 1 + 4

5

wsnjc-2268:~ # expr 1+4

1+4

wsnjc-2268:~ # expr 5 + 9 / 3

8

wsnjc-2268:~ # expr 5 * 4

expr: syntax error

wsnjc-2268:~ # expr 5 \* 4 - 2

18

wsnjc-2268:~ # expr 11 % 3

2

wsnjc-2268:~ # num=1

wsnjc-2268:~ # num=`expr $num + 1 `

wsnjc-2268:~ # echo $num

2

2)浮点运算

注释:没有内置算术运算,使用bc,awk程序进行浮点运算

示例:

wsnjc-2268:~ # echo "scale=3; 13 / 2" | bc

6.500

wsnjc-2268:~ # n=`bc << EOF

> scale=3

> 13/2

> EOF`

wsnjc-2268:~ # echo $n

6.500

wsnjc-2268:~ # product=`echo "sdf" | awk

'BEGIN{x=2.45;y=3.123}{printf "%.2f\n",x*y}'`

wsnjc-2268:~ # echo $product

7.65

2、C shell和TC shell

1)整数算术运算

语法:运算符+ - * / % << >> += -= *= /= ++

--

注释:只支持整数的算术运算,符号@用于将计算结果赋给数值变量;变量(作为右操作数的)需要使用$符号引用其值

示例:

linux-mdcc /root# @ sum = 4 + 6

linux-mdcc /root# echo $sum

10

linux-mdcc /root# @ sum++

linux-mdcc /root# echo $sum

11

linux-mdcc /root# @ sum += 3

linux-mdcc /root# echo $sum

14

linux-mdcc /root# @ sum--

linux-mdcc /root# echo $sum

13

linux-mdcc /root# @ n = 3+4

@: Badly formed number.

2)浮点算术运算

注释:不支持浮点运算,使用使用程序进行操作

示例:同上,使用bc和awk程序进行操作

3、Korn shell

1)算术运算

语法:typeset -i -i# -F -E; integer是typeset -i

的别名

注释:支持整型运算,1998版后支持浮点运算

示例:

linux-mdcc:/root # typeset -i num

linux-mdcc:/root # num=hello

linux-mdcc:/root # echo $num

0

linux-mdcc:/root # num=5 + 5

ksh: +: not found [No such file or directory]

linux-mdcc:/root # num=5+5

linux-mdcc:/root # echo $num

10

linux-mdcc:/root # num=4*6

linux-mdcc:/root # echo $num

24

linux-mdcc:/root # num="4 * 6"

linux-mdcc:/root # echo $num

24

linux-mdcc:/root # num=6.789

linux-mdcc:/root # echo $num

6

2)使用不同的基数

linux-mdcc:/root # num=15

linux-mdcc:/root # typeset -i2 num

linux-mdcc:/root # print $num

2#1111

linux-mdcc:/root # typeset -i8 num

linux-mdcc:/root # print $num

8#17

linux-mdcc:/root # typeset -i16 num

linux-mdcc:/root # print $num

16#f

linux-mdcc:/root # read number

2#1101

linux-mdcc:/root # print $number

2#1101

linux-mdcc:/root # typeset -i number

linux-mdcc:/root # print $number

13

linux-mdcc:/root # typeset -i2 number

linux-mdcc:/root # print $number

2#1101

linux-mdcc:/root # typeset -i8 number

linux-mdcc:/root # print $number

8#15

3)let命令

注释:Korn shell的内置命令,用来执行整型运算

示例:

linux-mdcc:/root # let i=i+1

linux-mdcc:/root # print $i

6

linux-mdcc:/root # let "i = i + 2"

linux-mdcc:/root # print $i

8

linux-mdcc:/root # let "i+=1"

linux-mdcc:/root # print $i

9

4)对于空格,可以用(())和""屏蔽掉

linux-mdcc:/root # ((i=9))

linux-mdcc:/root # (( i = i * 6))

linux-mdcc:/root # ((i = 9 ))

linux-mdcc:/root # clear

linux-mdcc:/root # (( i = 9 ))

linux-mdcc:/root # (( i = i * 6 ))

linux-mdcc:/root # print $i

54

linux-mdcc:/root # (( i > 0 && i <=

10 ))

linux-mdcc:/root # print $?

1

linux-mdcc:/root # j=100

linux-mdcc:/root # (( i < j || i == 5 ))

linux-mdcc:/root # print $?

0

linux-mdcc:/root # if (( i < j && i ==

54 ))

> then

> print True

> fi

True

4、Bash shell

1)算术运算

注释:同Korn shell,用declare声明整型;(())中的变量(作为右操作数的)前面也可以加上$符号,效果相同

示例:

linux-mdcc:~ # declare -i num

linux-mdcc:~ # num=hello

linux-mdcc:~ # echo $num

0

linux-mdcc:~ # num=5 + 5

~ ~

linux-mdcc:~ # num=5+5

linux-mdcc:~ # echo $num

10

linux-mdcc:~ # num=4*6

linux-mdcc:~ # echo $num

24

linux-mdcc:~ # num="4 * 6"

linux-mdcc:~ # echo $num

24

linux-mdcc:~ # num=6.5

-bash: 6.5: syntax error in expression_r(error

token is ".5")

==============================================================

linux-mdcc:~ # declare -i x=017

linux-mdcc:~ # echo $x

15

linux-mdcc:~ # x=2#101

linux-mdcc:~ # echo $x

5

linux-mdcc:~ # x=8#17

linux-mdcc:~ # echo $x

15

linux-mdcc:~ # x=16#b

linux-mdcc:~ # echo $x

11

==============================================================

linux-mdcc:~ # let i=5

linux-mdcc:~ # let i=i+1

linux-mdcc:~ # echo $i

6

linux-mdcc:~ # let "i = i + 2"

linux-mdcc:~ # echo $i

8

linux-mdcc:~ # let "i+=1"

linux-mdcc:~ # echo $i

9

linux-mdcc:~ # i=3

==============================================================

linux-mdcc:~ # ((i+=4))

linux-mdcc:~ # echo $i

7

linux-mdcc:~ # ((i=i-2))

linux-mdcc:~ # echo $i

5

2)浮点运算

注释:同bc,awk计算程序对浮点数的计算

结束语:这里遇到了bc运算;内联输入;以及awk操作,实在是没有想到的,这些功能都好强大又容易被大家忽略的啊!

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值