《跟老男孩學Linux營運之shell編程實戰》-第四章 變數的數值計算

來源:互聯網
上載者:User

標籤:shell 變數 數值計算

本文講解shell編程中變數的數值計算。

1.常見的算術運算子:

650) this.width=650;" width="600" height="216" title="2.png" style="width:600px;height:216px;" alt="wKiom1j4RnrydWFJAABg6oBovMQ759.png" src="https://s4.51cto.com/wyfs02/M01/91/C5/wKiom1j4RnrydWFJAABg6oBovMQ759.png" border="0" vspace="0" hspace="0" />

提示:

此處對於我自己來說++、--比較難理解,之前一看到指令碼中有這些符號,就看不懂了,所以在此舉例說明一下:

[[email protected] ~]# a=10                  ==>定義變數a
[[email protected] ~]# echo $((a++))   

 ==>如果a在運算子++或--的前面,那麼輸出整個運算式時,會輸出a的值, 此前定義的變數a為10,所以此處的值為10.
10
[[email protected] ~]# echo $a            ==>執行上述運算式後,因為有a++,因此a會自增1,所以輸出的值為11
11
[[email protected] ~]# a=11                 ==>定義變數a

[[email protected] ~]# echo $((a--))         

==>如果a在運算子++或--的前面,那麼輸出整個運算式時,會輸出a的值,前定義的a為11,所以此處的值為11.

11
[[email protected] ~]# echo $a             ==>執行上述運算式後,因為有a--,因此a會自減1,所以輸出的值為10
10
[[email protected] ~]# a=10
[[email protected] ~]# echo $((--a))    

==>如果a在運算子++或--的後面,那麼輸出整個運算式時,先進行自增或自減計算,因為a為10,  且要自減,所以運算式的值為9.

9
[[email protected] ~]# echo $a            ==>執行上述運算式後,a自減1,所以運算式的值為9.

9
[[email protected] ~]# echo $((++a))    

==>如果a在運算子++或--的後面,那麼輸出整個運算式時,先進行自增或自減計算,因為a為9,且要自增1,所以運算式的值為10

10
[[email protected] ~]# echo $a            ==>執行上述運算式後,a自增1,所以運算式的值為10

10

總結:

執行echo $((a++))和echo $((a--))命令輸出整個運算式時,輸出的值為a的值,運算式執行完畢後,會對a進行++、--的運算,而執行

echo $((++a))和echo $(--a)命令輸出整個運算式時,會先對a進行++、--的運算,然後再輸出運算式的值,即為a運算後的值。

記憶口訣:

變數a在運算子之前,輸出運算式的值為a,然後a自增或自減;

變數a在運算子之後,輸出的運算式會先進行自增或自減,運算式的值就是自增或自減後a的值。

常見的算術運算命令:

650) this.width=650;" width="600" height="160" title="3.png" style="width:600px;height:160px;" alt="wKioL1j4Rq7D2OJXAABXt-afQYw384.png" src="https://s4.51cto.com/wyfs02/M01/91/C4/wKioL1j4Rq7D2OJXAABXt-afQYw384.png" border="0" vspace="0" hspace="0" />

(1)雙小括弧"(())"數值運算命令

雙小括弧"(())"數值運算的基礎文法

雙小括弧"(())"的作用是進行數值運算與數值比較,效率很高,用法靈活,是企業情境營運人員經常採用的運算操作符。

操作方法見下表:

650) this.width=650;" width="600" height="135" title="4.png" style="width:600px;height:135px;" alt="wKioL1j4SeeDitArAABhAdKw-K8876.png" src="https://s2.51cto.com/wyfs02/M01/91/C4/wKioL1j4SeeDitArAABhAdKw-K8876.png" border="0" vspace="0" hspace="0" />

提示:

(())進行比較操作時,如果"echo $((2>1))"返回結果為1則表示真,如果返回結果為0,則表示假。

“(())”運算式在命令列執行時不需要加$符號,直接使用((2+3))形式即可,但是如果需要輸出,就要加$

符號,如:echo  $((2+3))。

"(())"裡的所有的字元之間沒有空格,有一個或多個空格都不會影響結果。

(2)let運算命令的用法

let運算命令的文法格式:let  賦值運算式

let賦值運算式的功能等同於“((賦值運算式))”

let賦值:舉例:let  i=i+2   ==>等同於((i=i+2))

(3)expr命令的用法

expr命令的基本用法:

expr既可以用於整數運算,也可以用於相關字串長度、匹配等的運算處理。

應用1:expr用於計算

文法:expr  Expression    ==>expression中可包含變數

例如:

[[email protected] ~]# expr 1 + 1
2
[[email protected] ~]# expr 1 \* 1
1

注意:在使用expr時,要注意以下2點:

  • 運算子及用於計算的數字左右都至少有一個空格,否則會報錯。

  • 使用乘號時,必須用反斜線進行轉義。

應用2:判斷一個變數值或字串是否為整數

此應用利用以expr做計算時變數或字元創必須為整數的規則,把一個變數或字串和一個已知的整數(非0)相加,

看返回的值是否為0,如果為0,就認為做加法的變數或字串為整數,否則就不是整數。

另外,expr match功能也可以進行整數判斷,格式如下:

expr match $string  substring

在$string字串中匹配substring字串,然後返回匹配到的substring字串的長度,若找不到,則返回0。

應用3:expr判斷副檔名是否符合要求:

舉例說明:

判斷是否是以.pub為副檔名:

[[email protected] scripts]# cat expr.sh
#!/bin/sh
if expr "$1" : ".*\.pub" &>/dev/null    ==>注意:在此冒號前後要有空格
   then
     echo "you are using $1"
   else 
     echo "pls use *.pub file"
fi

[[email protected] scripts]# sh expr.sh qq.pub
you are using qq.pub
[[email protected] scripts]# sh expr.sh qq
pls use *.pub file

應用4:通過expr計算字串的長度

文法:expr length  $變數名或字串

(4)bc命令的用法

bc是Linux下的計算機,當然除了作為計算機使用,還可以作為命令列計算工具使用。

使用方法如下:

[[email protected] scripts]#  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‘.
2+3
5
3*3
9
[[email protected] scripts]# echo 2+3|bc
5
[[email protected] scripts]# echo "scale=2;9/2" | bc   ==>使用scale=2保留2位小數
4.50
[[email protected] scripts]# echo "scale=2;355/113" | bc
3.14

(5)awk實現計算

利用awk運算的效果也很好,適合小數和整數,尤其是小數,運算很精確。

樣本如下:

[[email protected] ~]# echo "5 6" | awk ‘{print ($1+$2)}‘

==>$1為第1個數字,$2為第2個數字,用空格分開 ,注意awk ‘{ }‘的單引號
11
[[email protected] ~]# echo "5.5 6.6" | awk ‘{print ($1+$2)}‘
12.1

(6)declare(同typeset)命令的文法

declare與typeset命令是bash的內建命令,二者命令的文法相同,用來聲明shell變數,設定變數的屬性。

常用命令參數:

  • -r:設定變數為唯讀

  • -i:設定變數為整數

  • -a:設定變數為數組array

  • -f:如果後面沒有參數的話,會列出之前指令碼定義的所有函數,如果有參數的話,列出以參數命名的函數

  • -x:設定變數在指令碼外也可以使用

簡單使用如下:

[[email protected] ~]# declare -i A=1 B=2
[[email protected] ~]# A=A+B
[[email protected] ~]# echo $A
3

(7)$[ ]符號的運算樣本

[[email protected] ~]# echo $[1+2]
3
[[email protected] ~]# echo $[1*2]
2

(8)基於shell變數輸入read命令的運算實踐

shell指令碼除了可以直接賦值或指令碼傳參外,還可以使用read命令從標準輸入中獲得,read為bash的

內建命令,而已通過help read查看協助。

文法格式:read  [參數]  [變數名]

常用參數:

-p(prompt):設定提示資訊

-t(timeout):設定輸入等待時間,單位預設為秒。

[[email protected] ~]# read -t 5 -p "Pls input one num:" num  

==>此處的num為變數名,注意此處不需要加$符號,下面a、b同理。
Pls input one num:2
[[email protected] ~]# read -t 5 -p "Pls input two num:" a b      
Pls input two num:1 2




以上為本人在讀《跟老男孩學Linux營運之shell編程實戰》這本書時的筆記,如有任何著作權問題,請聯絡留言。


本文出自 “shayatou_1990” 部落格,請務必保留此出處http://shayatou1990.blog.51cto.com/12806916/1918020

《跟老男孩學Linux營運之shell編程實戰》-第四章 變數的數值計算

相關文章

聯繫我們

該頁面正文內容均來源於網絡整理,並不代表阿里雲官方的觀點,該頁面所提到的產品和服務也與阿里云無關,如果該頁面內容對您造成了困擾,歡迎寫郵件給我們,收到郵件我們將在5個工作日內處理。

如果您發現本社區中有涉嫌抄襲的內容,歡迎發送郵件至: info-contact@alibabacloud.com 進行舉報並提供相關證據,工作人員會在 5 個工作天內聯絡您,一經查實,本站將立刻刪除涉嫌侵權內容。

A Free Trial That Lets You Build Big!

Start building with 50+ products and up to 12 months usage for Elastic Compute Service

  • Sales Support

    1 on 1 presale consultation

  • After-Sales Support

    24/7 Technical Support 6 Free Tickets per Quarter Faster Response

  • Alibaba Cloud offers highly flexible support services tailored to meet your exact needs.