Shell運算命令總結

shell常用的運算命令有expr、$[]或 $(())、let命令、bc,awk工具也能進行數值運算,但是畢竟只要的作用並不是用來做運算的,expr、 $[]或 $(())let只能進行整數的運算,bc,awk都可以進行整數和小數的運算。

1.使用expr命令
乘法操作需要在*號前面加上轉義符\,避免被bash當做是Shell的通配符;參與運算的整數值與操作符之間需要以空格分開,引用變量時必須加$符號。

實例:
定義變量a=666,分別計算與12加減乘除和求模(餘數)運算結果

[root@redhat ~]# a=666
[root@redhat ~]# expr $a + 12  //加法
678
[root@redhat ~]# expr $a - 12  //減法
654
[root@redhat ~]# expr $a \* 12 //乘法,操作符要添加轉義符\
7992
[root@redhat ~]# expr $a / 12 //除法,僅保留整除結果
55
[root@redhat ~]# expr $a % 12 //除法,求模(餘數)
6

2.使用[][]或(())表達式,兩者效果等同
乘法操作*無需轉義,運算符兩側可以無空格;引用變量可省略 $ 符號;計算結果替換表達式本身,可結合echo命令輸出。
同樣對於變量a=666,分別計算與12的加減乘除和求模運算結果:

[root@redhat ~]# echo $[a+12] //加法,[]內可以沒有空格
678
[root@redhat ~]# echo $[a-12] //減法
654
[root@redhat ~]# echo $[a*12] //乘法
7992
[root@redhat ~]# echo $[a/12] //除法,保留整數結果
55
[root@redhat ~]# echo $[a%12] //求模(餘數)
6
[root@redhat ~]# echo $((a*12)) //乘法
7992

3.使用let命令
expr或[][]、(())方式只進行運算,並不會改變變量的值;而let命令可以直接對變量值做運算再保存新的值。因此變量a=666,在執行let運算後的值會變更;另外,let運算操作並不顯示結果,但是可以結合echo命令來查看:

[root@redhat ~]# let b=a+12 //加法
[root@redhat ~]# echo $b
678
[root@redhat ~]# let b=a-12 //減法
[root@redhat ~]# echo $b
654
[root@redhat ~]# let b=a*12 //乘法
[root@redhat ~]# echo $b
7992
[root@redhat ~]# let b=a/12 //除法,保留整數結果
[root@redhat ~]# echo $b
55
[root@redhat ~]# let b=a%12 //求模
[root@redhat ~]# echo $b
6
[root@redhat ~]# let a++
[root@redhat ~]# echo $a
667
let a++相當於let a=a+1
let a--相當於let a=a-1
let a+=66相當於let a=a+66
let a-+66相當於let a=a-66
let a*=66相當於let a=a*66
let a/=66相當於let a=a/66
let a%66相當於let a=a%66

4.小數運算工具
1)bc交互式運算
先執行bc命令進入交互環境,然後再輸入需要計算的表達式。以計算小數1.234與5.678的四則運算爲例,相關操作如下:

[root@redhat ~]# bc
bc 1.06.95
Copyright 1991-1994, 1997, 1998, 2000, 2004, 2006 Free Software Foundation, Inc.
This is free software with ABSOLUTELY NO WARRANTY.
For details type `warranty'. 
1.234+5.678 //加法
6.912
1.234-5.678 //減法
-4.444
1.234*5.678 //乘法
7.006
1.234/5.678 //除法,只保留整數結果
0
quit //退出交互計算器

2)bc非交互式運算
將需要運算的表達式通過管道操作交給bc運算。注意,小數位的長度可採用scale=N限制,除此以外也受參與運算的數值的小數位影響。以計算小數1.234與5.678的四則運算爲例,相關操作如下:

[root@redhat ~]# echo 'scale=4;1.234+5.678' | bc   
6.912
[root@redhat ~]# echo 'scale=4;1.234*5.678' | bc 
7.0066
[root@redhat ~]# echo 'scale=4;1.234/5.678' | bc 
.2173
發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章