[20181229]bash shell的算术运算 .txt
--//bash shell的算术运算现在已经改进许多,自己许多操作不熟悉,编程还是按照老方法处理,自己做一些总结.
1.使用let内部命令:
$ a=12
$ let a=a+1
$ echo $a
13
$ let a=a\*3
$ echo $a
39
--//还可以执行如下:
$ let "a+=1"
$ echo $a
40
--//这样的方式最大的缺点是不能有空格.
2.使用expr命令:
--//这样的方式要使用分开:
$ a=12
$ expr $a \* 4
48
$ b=$(expr $a + 13 )
$ echo $b
25
3.比较新的方式使用如下:
$(( expression ))
$[ expression ]
--//使用$(( expression ))
$ echo $(( a+ b))
25
$ echo $(( a+ b ))
25
$ echo $((a+b))
25
$ echo $(($a+$b))
25
--//使用$[ expression ]
$ echo $[a+b]
25
$ echo $[$a+b]
25
$ echo $[$a+$b]
25
$ echo $[$a*$b]
156
--//这样的方式比较灵活,里面可以加或者不加$符号,混合使用也可以.
--//我个人觉得$[ expression ]更好一些.另外就是的方式在if语句里面语法写出如下:
if [[ string expression ]]
then
command
fi
--//也可以使用如下语法:
if (( numeric expression ))
then
command
fi
--//以前比较数字使用:
#-eq 等于
#-ne 不等于
#-gt 大于
#-ge 大于等于
#-lt 小于
#-le 小于等于
--//感觉不直观.每次我给查手册.现在可以写出如下:
$ cat a.sh
#!/bin/bash
a=100
if (( $a > 100 ))
then
echo "a is equal to $a"
else
echo "a is not equal"
fi
$ . a.sh
a is not equal
4.在复杂的运算建议使用外部命令bc.
5.还有一些进制转换,bash并不是很灵活,仅仅支持其它类型转换为十进制模式.而且首先必须声明变量为整形.
--//2进制
$ declare -i a
$ a=2#1001
$ echo $a
9
--//8进制
$ a=8#17
$ echo $a
15
$ a=8#19
-bash: 8#19: value too great for base (error token is "8#19")
--//16进制
$ a=16#FF
$ echo $a
255
$ a=16#f0
$ echo $a
240
--//10进制转换16进制.
$ b=$(printf "%x" 240)
$ echo $b
f0
--//8进制转换10进制.
$ b=$(printf "%d" 017)
$ echo $b
15
--//16进制转换10进制.
b=$(printf "%d" 0xf0)
$ echo $b
240
--//其它10转8,10转2视乎无法使用printf.