shell腳本中用到的計算


  在shell腳本中計算一般會涉及到let、$(())、$[]、bc(另擴展expr)。其中let、$(())、$[]都是用來做基本整數運算,bc可以用來做浮點運算

(1).let、$(())、$[]

  因為這三個基本等價,所以放在一起說明。

  首先來看下let命令

[xf@xuexi ~]$ num=10
[xf@xuexi ~]$ echo $num
10
[xf@xuexi ~]$ let num=$num+6;echo $num
16
[xf@xuexi ~]$ let num=num-6;echo $num  //let命令中等號右邊可以沒有美元符號
10
[xf@xuexi ~]$ let num+=6;echo $num  //+=、-=、*=、/=分別是自加、自減、自乘、自除
16
[xf@xuexi ~]$ let num-=6;echo $num
10

  再看$(())

[xf@xuexi ~]$ num=10
[xf@xuexi ~]$ echo $num
10
[xf@xuexi ~]$ num=$((num+6));echo $num  //也可以num=$((num+=6))
16
[xf@xuexi ~]$ num=$((num-6));echo $num
10

  最后看$[]

[xf@xuexi ~]$ num=10
[xf@xuexi ~]$ echo $num
10
[xf@xuexi ~]$ num=$[num+6];echo $num
16
[xf@xuexi ~]$ num=$[num-6];echo $num
10

  注意:$(())和$[]可以直接使用在命令中,而let則不行

[xf@xuexi ~]$ num=10
[xf@xuexi ~]$ echo $((num+6))
16
[xf@xuexi ~]$ echo $[num+6]
16

(2).bc

  bc命令是用來做浮點運算,也就是小數點運算。

[xf@xuexi ~]$ 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'.   //以上抬頭可以使用-q命令省略
num =10  //bc命令里可以另外定義變量
num*5
50

5/3
1  //這里之所以為整數,是因為沒有設置小數位數
scale=2  //設置小數的位數為2位
5/3
1.66

quit  //退出

  上面都是在命令行中使用,如果想要使用到腳本當中需要借助echo命令來使用,如下:

[xf@xuexi ~]$ vim a.sh
[xf@xuexi ~]$ cat a.sh 
#!/bin/bash
num=10
echo "scale=2;$num/3" | bc
[xf@xuexi ~]$ sh a.sh
3.33

(3).擴展expr

  expr可以對數字進行基本運算,也可以做比較,還可以對字符串進行操作。

  首先使用expr進行基本運算,注意乘號(*)需要轉義,數字與符號之間必須使用空格隔開

[xf@xuexi ~]$ expr 5 + 2
7
[xf@xuexi ~]$ expr 5 - 2
3
[xf@xuexi ~]$ expr 5 * 2
expr: 語法錯誤
[xf@xuexi ~]$ expr 5 \* 2
10
[xf@xuexi ~]$ expr 5 / 2
2
//下面是錯誤的格式
[xf@xuexi ~]$ expr 5+1
5+1
[xf@xuexi ~]$ expr 5 * 1
expr: 語法錯誤

  接着進行數字的比較,注意輸出0表示假(錯誤),輸出1表示真(正確),大小於號需要轉義,數字與符號之間一樣需要用空格隔開

[xf@xuexi ~]$ expr 5 \>  1
1
[xf@xuexi ~]$ expr 5 \<  1
0
[xf@xuexi ~]$ expr 5 = 1
0
[xf@xuexi ~]$ expr 5 != 1
1
//下面是錯誤的格式
[xf@xuexi ~]$ expr 5 > 1
[xf@xuexi ~]$ expr 5\>1
5>1

  最后看對字符串的處理,可以使用"length [字符串]"來統計字符串長度;也可以使用"substr [偏移量] [長度]"截取指定的字符,偏移量從1開始;

[xf@xuexi ~]$ expr length "hello world"
11
[xf@xuexi ~]$ expr substr "hello world" 2 3  //2表示從第2位開始,3表示截取3位字符
ell

  


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM