標籤: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變數,設定變數的屬性。
常用命令參數:
簡單使用如下:
[[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編程實戰》-第四章 變數的數值計算