1. 程式人生 > >shell筆記之運算子

shell筆記之運算子

利用(())進行運算

echo $(())

 [[email protected]_ser ~]# echo $((1+3))
 4
 [[email protected]_ser ~]# echo $((1-3))
 -2

變數運算輸出

 [[email protected]_ser ~]# i=6
 [[email protected]_ser ~]# echo $((i+1))
 7
 [[email protected]_ser ~]# echo $((i=i+5))
 11
 [[email protected]
_ser ~]# echo $((i+=5)) 16 [[email protected]_ser ~]# echo $i 16

i++ 先輸出變數的值再進行運算

 [[email protected]_ser ~]# i=5
 [[email protected]_ser ~]# echo $((i++))
 5
 [[email protected]_ser ~]# echo $i
 6

++i 先進行運算再輸出變數的值

 [[email protected]_ser ~]# i=5
 [[email protected]
_ser ~]# echo $((++i)) 6 [[email protected]_ser ~]# echo $i 6
PS:別忘記$符號了哦

let 實現運算

 [[email protected]_ser ~]# let i=1+1
 [[email protected]_ser ~]# echo $i
 2
PS:需要先將運算結果賦值給一個變數,輸出變數

declare 實現運算

 [[email protected]_ser ~]# declare -i i=1+3
 [[email protected]_ser ~]# echo $i
 4
不要忘記了引數-i哦

expr實現運算

 [[email protected]_ser ~]# expr 1 + 3
 4
 [[email protected]_ser ~]# expr 1+3
 1+3
 [[email protected]_ser ~]# i=1
 [[email protected]_ser ~]# expr $i + 1
 2
可以實現直接運算和變數輸出運算
PS:別忘記了空格喲
擴充套件功能
對整數資訊做判斷
 [[email protected]_ser scripts]# cat sum.sh 
 a=$1
 b=$2
 expr $a + $b &>/dev/null
 [ $? -ne 0 ] && {
 	echo pls input int
 	exit 1
 }
 echo $(($a+$b));
對字串長度進行判斷
 [[email protected]_ser scripts]# cat sum1.sh
 info=$1
 real=$(expr length "$info") 
 [ $real -ne 18 ]&&{
   echo "pls input right number, not 18 bit"
   exit 1
 }
 
 echo "身份證號碼為:$info"
對檔名資訊進行判斷
有邏輯匹配方式

利用$[] 實現運算

 [[email protected]_ser ~]# echo $[2*6]
 12
 [[email protected]_ser ~]# i=3
 [[email protected]_ser ~]# echo $[i*3]
 9
 [[email protected]_ser ~]# echo $[i**3]
 27

利用bc實現運算

整數運算
 [[email protected]_ser scripts]# echo 1+2|bc
 3
小數運算
 [[email protected]_ser scripts]# echo 1.1+2|bc
 3.1

利用awk實現運算

 [[email protected]_ser ~]# echo 2.1 2.2 |awk '{print $1*$2}'
 4.62
小練習
環境
 [[email protected]_ser ~]# echo {1..10} >text.txt 
 [[email protected]_ser ~]# cat text.txt 
 1 2 3 4 5 6 7 8 9 10
奇數偶數求和運算
 [[email protected]_ser ~]# awk '{for(i=1;i<=NF;i+=2)sum+=$i}END{print sum}' text.txt 
 25
 [[email protected]_ser ~]# awk '{for(i=2;i<=NF;i+=2)sum+=$i}END{print sum}' text.txt 
 30