shell指令碼中用到的計算

2022-05-24 12:03:12 字數 2559 閱讀 2243

在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

this is free software with absolutely no warranty.

for details type `warranty'.   //以上抬頭可以使用-q命令省略

num =10  //bc命令裡可以另外定義變數

num*5

505/3

1  //這裡之所以為整數,是因為沒有設定小數字數

scale=2  //設定小數的位數為2位

5/31.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

在linux下shell指令碼中if中用到or怎麼寫

在使用 cs2的測試程式demo squeezenet download convert run.sh時,一旦新增 d myraid 總是出現錯誤 demo squeezenet download convert run.sh 第 54 行 引數太多 其中第 4行 如下 if target myri...

工作中用到的小指令碼2

import xlwt import openpyxl from urllib.parse import import xlrd def eq l workbook xlrd.open workbook data.xlsx table workbook.sheet by index 0 all da...

js 計算快速統計中用到的日期

最近在做統計報表模組,其中查詢條件用到了快速查詢,主要為了方便客戶統計查詢常用的幾個日期緯度,比如本週 上週 本月 上月 昨日。使用js計算,主要用到了js date getdate getday 包括格式化日期函式。function newdate str 格式化日期格式 stime stime....