02 數據運算/條件測試
阿新 • • 發佈:2019-03-08
邏輯或 exp less 邏輯判斷 字符 not 等於 ++ 識別 一.整數運算工具
1.使用expr命令(運算兩邊必須有空格,引用變量時必須加$符號)
[root@svr5 ~]# x=10 //定義變量x
expr $x + 10 20 //加 (每個之間都要空格)
expr $x - 10 0 //減
expr $x \* 10 100 //乘
expr $x / 10 1 //除 (僅保留整數結果)
expr $x % 10 0 //求模
2.使用$[]或$(())表達式
乘法操作*無需轉義,運算符兩側可以無空格;引用變量可省略 $ 符號;計算結果替換表達式本身,可結合echo命令輸出。同樣對於變量x=10:
[root@svr5 ~]# x=10 //定義變量x
echo $[x+10] 20
echo $[x-10] 0
echo $[x*10] 100
echo $[x/10] 1
echo $((x%10)) 0
3.使用let命令(更改變量的值)
[root@svr5 ~]# x=10 //定義變量x
let y=x+10; echo $y=20
let x++; echo $x=11
let x--; echo $x=10
let x+=10; echo $x=20
let x-=10; echo $x=10
let x*=10; echo $x=100
let x/=10; echo $x=10
let x%=10; echo $x=0
二.小數運算工具
1.bc進入交互環境計算加減乘除
2.bc非交互式運算
echo ‘scale=4;12.345+67.891011‘ | bc
echo ‘scale=2;12.34-56.78‘ | bc
echo ‘scale=3;12.345*56.789‘ | bc
echo ‘scale=1;12.345/56.789‘ |bc
小數的比較: > >= < <= = !=
三.條件測試
1.比較兩個字符串是否相同
[ $USRE == "root" ];echo $? 0 (root用戶)
[ $USER == "zhangsan" ];echo $? 非0 (root用戶)
2.比較兩個字符串是否不同
root下:[ $USER != "root" ];echo $? 1
非root:[ $USER != "root" ];echo $? 0
3.一條執行多條命令的情況
A && B :A成功,才執行B命令
A || B :A失敗,才執行B命令
A;B :依次執行,互不影響
A && B || C :如果A則B否則C
4.字符串的值為空/不為空
[ -z "" ] [ -n "str" ]
var1="str";var2=""
[ -z "$var1" ] && echo "為空" || echo "不為空"
[ -n "$var2" ] && echo "不為空" || echo "為空"
[ -! -z "$var2" ] && echo "不為空" || echo "為空"
5.整數值的比較
-eq 是否相等 (equal)
-ne 是否不相等 (not equle)
-gt 是否大於 (greater than)
-ge 是否大於等於 (greater or equal)
-lt 小於 (lesser than)
-le 小於等於 (lesser equal)
[root@svr5 ~]# x=20
[ $x -le 10 ] && echo "小於或等於" || echo "大於" ---大於
提取當前登陸用戶數,判斷是否大於3
n=$(who | wc -l);[ $n -ge 3 ] && ehco "大於等於3" || echo "小於3"
簡化:[ $(who | wc -l) -ge 3 ] $$ echo "大於等於3" || echo "小於3"
6.識別文件/目錄的狀態
1> -e 判斷是否存在,不管是目錄還是文件
[ -e "/zhangsan/" ] && echo "存在" || echo "不存在"
2> -d 判斷對象是否為目錄(存在且是目錄)
[ -d "/opt/" ] && echo "是目錄" || echo "不是目錄"
[ -d "/opt/1.txt/" ] && echo "是目錄" || echo "不是目錄"
3> -f 對象是否是文件(存在且是文件)
4> -r 判斷對象是否可讀(文件,非root用戶)
5> -w 判斷對象是否可寫(文件,非root用戶)
6> -x 判斷對象是否可執行
7.復合邏輯判斷
1> 邏輯與 && 都成立為真
[root@svr5 ~]# x=10 //設置x變量的值為10
[ $x -ge 5 ] && [ $USER == "root" ] && echo "true" || echo "false"
2> 邏輯或 || 有一個真則為真
[ $x -ge 30 ] || [ $USER == "zhangsan" ] && echo "true" || echo "false"
[ $x -ge 10 ] || [ $USER == "zhangsan" ] && echo "true" || echo "false"
四.if選擇結構
編寫三個腳本:
檢測/media/cdrom目錄,若不存在則創建
檢測並判斷指定的主機是否可ping通
從鍵盤讀取一個論壇積分,判斷論壇用戶等級,等級分類如下:
大於等於90 神功絕世
大於等於80,小於90 登峰造極
大於等於70,小於80 爐火純青
大於等於60,小於70 略有小成
小於60 初學乍練
02 數據運算/條件測試